Lucene.Net BooleanClause выпуск - PullRequest
       5

Lucene.Net BooleanClause выпуск

1 голос
/ 16 августа 2010

У меня проблема с Lucene.Net и BooleanQuery. Это мой код:

 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. Таким образом, оба запроса вместе должны возвращать документы определенного типа И содержать конкретные слова в заголовке, но он возвращает все типы, которые имеют определенные слова в заголовке.

1 Ответ

2 голосов
/ 16 августа 2010

Используйте еще один слой логического запроса, чтобы сгруппировать оба:

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