2009-07-22 14 views
10

Soy nuevo en Lucene, estoy tratando de hacer una búsqueda algo como estoLucene "o consultas"

content="some thext" and (id ="A" or id="B" or id="c") 

estoy realmente perdido con eso, ustedes me podría ayudar a

Gracias.

Respuesta

10

creo que la sección "Agrupación" en el Query Parser Syntax documentation proporciona la respuesta:

(jakarta OR apache) AND website 

Sospecho que debe hacer sus operadores (and, or) mayúsculas. Además, no creo que puedas usar el operador de iguales (usa dos puntos en su lugar).

content:"some thext" AND (id:"A" OR id:"B" OR id:"c") 
+0

Gracias ... fue tan exitosa su ayuda –

+0

se podría simplificar a: 'contenido: "algún thext" y el ID :("A" o "B" O "c") ' –

21
BooleanQuery mainQuery = new BooleanQuery(); 

TermQuery contentFilter = new TermQuery(new Term("content", "some text")); 
mainQuery.add(contentFilter, BooleanClause.Occur.MUST); 

BooleanQuery idFilter = new BooleanQuery(); 
idFilter.setMinimumNumberShouldMatch(1); 
idFilter.add(new TermQuery(new Term("id", A)), BooleanClause.Occur.SHOULD); 
idFilter.add(new TermQuery(new Term("id", B)), BooleanClause.Occur.SHOULD); 
idFilter.add(new TermQuery(new Term("id", C)), BooleanClause.Occur.SHOULD); 
mainQuery.Add(idFilter, BooleanClause.Occur.MUST); 
+1

Parece que' moduleFilter' debe cambiarse a 'idFilter'. De todos modos +1 por respuesta. – RyuuGan

+3

Una explicación que encontré útil (de los Occur javadocs): Para una BooleanQuery sin cláusulas Occur.MUST, una o más cláusulas Occur.SHOULD deben coincidir con un documento para que coincida BooleanQuery. – Renaud

-1

BooleanQuery ahora está en desuso.

Nueva sintaxis se parece a esto. (Debe == O, debe == Y)

val searchManager = Search.getSearchManager(cache) 
val queryBuilder = searchManager.buildQueryBuilderForClass(classTag[T].runtimeClass).get() 
val luceneQuery = queryBuilder.bool() 
luceneQuery.should(new TermQuery(new Term("type", "lala")) 
luceneQuery.createQuery()