Подтвердить что ты не робот

Lucene: В чем разница между Query и Filter

Lucene query vs filter?

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

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

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

4b9b3361

Ответ 1

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

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

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"

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

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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