2009-07-22 12 views
10

Sono nuovo in Lucene, io sto cercando di fare una ricerca simile a questaLucene "o query"

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

sto veramente perso con questo, mi può aiutare

Grazie.

risposta

10

credo la sezione "Gruppi" nella Query Parser Syntax documentation fornisce la risposta:

(jakarta OR apache) AND website 

Ho il sospetto che si dovrebbe fare gli operatori (and, or) maiuscoli. Inoltre, non penso che tu possa usare l'operatore di uguale (usare invece i due punti).

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

Grazie ... è stato un tale successo il vostro aiuto –

+0

si potrebbe semplificare a: 'contenuti: "alcuni thext" e l'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

Sembra che' moduleFilter' debba essere cambiato in 'idFilter'. Ad ogni modo +1 per risposta. – RyuuGan

+3

Una spiegazione che ho trovato utile (dai javadoc Occur): per un BooleanQuery senza clausole Occur.MUST, una o più clausole Occur.SHOULD devono corrispondere a un documento per il BooleanQuery da abbinare. – Renaud

-1

BooleanQuery è deprecato ora.

La nuova sintassi è simile a questa. (Dovrebbe == O, deve == e)

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()