Lucene: В чем разница между Query и Filter - PullRequest
26 голосов
/ 15 сентября 2010

Запрос Lucene против фильтра?

Они оба делают схожие вещи, например фильтры запросов по значению термина, я думаю, что фильтр существует с одинаковой целью.

Когда бы вы использовали фильтр и когда запрос?

Просто начинаю сегодня с люцены, поэтому пытаюсь прояснить концепцию

Ответы [ 3 ]

19 голосов
/ 15 сентября 2010

Фильтр не влияет на вычисление оценки нефильтрованных документов.

Например, представьте следующие документы:

1.
loc: "uk", "london"
text: "i live in london, "london is the best"

2.
loc: "london avenue", "london street", "london"
text: "I like the shop in london st."

Теперь предположим, что вы делаете следующий запрос:

q=+loc:"london" +text:"london"

в этом запросе оценка документа 2 выше, чем оценки документа 1 (поскольку в документе оценивается loc)

с использованием фильтра:

q=+text:"london" f=+loc:"london"

в этом запросе оценка документа 1 выше, чем у документа 2.

Извините за форматирование в стиле Solr, но общее представление ясно.

Другие причины использования фильтров для целей кэширования: фильтры кэшируются отдельно от запросов, поэтому если у вас динамический запрос со статической частью, имеет смысл фильтровать по статической части. Таким образом, обход индекса ограничен подмножеством отфильтрованных документов.

9 голосов
/ 15 сентября 2010

A Query может быть передано Searcher для поиска документов.A Filter не может;он может изменять только результаты, полученные с помощью Query.

. Реализация нового типа Query довольно сложна и требует понимания взаимосвязей внутренних элементов Lucene, таких как Weight, Scorer иSimilarity.Реализация Filter может быть довольно простой и вообще не взаимодействовать с IndexReader.

0 голосов
/ 08 февраля 2012

После закрытия базы данных выбор фильтра исчезает. Но когда вы закроете запрос и снова откроете его, он все равно будет там.

Вы также можете создать запрос, используя форму. Но вы не можете использовать фильтр в форме.

...