lucene.net объединяет несколько фильтров и без условий поиска - PullRequest
7 голосов
/ 20 августа 2009

Как я могу сделать фильтр по нескольким полям в Lucene.Net? На одном поле я просто делаю:

TermQuery tool = new TermQuery(new Term("Tool", "Nail"));
Filter f = new QueryFilter(tool);

Если я сейчас хочу добавить длину гвоздя к фильтру, как я могу это сделать?

Кроме того, я хочу, чтобы пользователь мог выполнять поиск без поискового запроса (то есть, просто выбрав категорию), как я могу это сделать?

1 Ответ

12 голосов
/ 20 августа 2009

Я думаю, вы задаете два вопроса ...

Вопрос 1: Добавление дополнительного фильтра

Помните, QueryFilter принимает любой запрос (не только TermQuery). Таким образом, вы можете создать BooleanQuery критериев, по которым вы хотите фильтровать.

TermQuery toolQuery = new TermQuery(new Term("Tool", "Nail"));
TermQuery nailLengthQuery = new TermQuery(new Term("NailLength", "3 inches"));

BooleanQuery filterQuery = new BooleanQuery();
filterQuery.add(toolQuery, BooleanClause.Occur.MUST);
filterQuery.add(nailLengthQuery, BooleanClause.Occur.MUST);

Filter f = new QueryFilter(filterQuery);

Вопрос 2: Поиск без поискового запроса

Если пользователь не предоставляет поискового запроса, вы можете выполнить поиск, используя запрос MatchAllDocsQuery.

...