2010-08-16 9 views
1

Je rencontre un problème avec Lucene.Net et un BooleanQuery. Ceci est mon code:Lucene.Net BooleanClause numéro

BooleanQuery query = new BooleanQuery(); 

String[] types = searchTypes.Split(','); 

foreach (string t in types) 
     query.Add(new TermQuery(new Term("document type", t.ToLower())), BooleanClause.Occur.SHOULD); 

Cela devrait essentiellement être une déclaration ou en passant par les documents qui ont un certain type, qui travaille lui-même. Cependant, j'ai aussi cette requête:

Query documentTitleQuery = new WildcardQuery(new Term("title", "*" + documentTitle.ToLower() + "*")); 
query.Add(documentTitleQuery, BooleanClause.Occur.MUST); 

Qui cherche des mots dans un titre. Ces deux requêtes fonctionnent toutes seules. Quand ils sont utilisés ensemble, il semble que Lucene traite le documentTitleQuery comme un OU. Ainsi, les deux requêtes doivent renvoyer des documents d'un type spécifique ET contenir des mots spécifiques dans le titre, mais il retourne tous les types qui ont des mots spécifiques dans le titre.

Répondre

2

Utilisez une autre couche de requête booléenne groupe à la fois:

BooleanQuery topQuery = new BooleanQuery(); 
... 
BooleanQuery query1 = new BooleanQuery(); 
... 
BooleanQuery query2 = new BooleanQuery(); 
... 
topQuery.add(query1, BooleanClause.Occur.MUST); 
topQuery.add(query2, BooleanClause.Occur.MUST); 
+0

Merci, tout a fonctionné! –