2010-08-16 4 views
1

Lucene.Net 및 BooleanQuery에 문제가 있습니다. 이것은 내 코드입니다.Lucene.Net BooleanClause issue

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

이것은 기본적으로 자체적으로 작동하는 특정 유형의 문서를 통과하는 OR 문이어야합니다. 그러나 다음 쿼리도 있습니다.

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

제목에서 단어를 검색합니다. 이 두 쿼리는 모두 독자적으로 작동합니다. 이들을 함께 사용하면 Lucene이 documentTitleQuery를 OR로 처리하고있는 것으로 보입니다. 따라서 두 쿼리가 함께 특정 유형의 문서를 반환하고 제목에 특정 단어를 포함해야하지만 제목에 특정 단어가있는 모든 유형을 반환합니다.

답변

2

사용 그룹에 부울 쿼리의 또 하나 개의 레이어를 모두 :

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

덕분에, 완전히 일! –