хранить документы на основе порядка сортировки в индексе lucene - PullRequest
3 голосов
/ 09 августа 2011

У меня есть два поля (name ,ifiedDate) в моем индексе. я хочу сохранить новый документ на основеifiedDate и сохранить индекс отсортированным по ModifiedDate
Документ № 1 является самым старым документом и (ifiedDate) тоже самый старый
doc #n является самым последним документом и (ifiedDate) уже близко

1) как я могу создать эту структуру индекса, которая документирует физически сохраненную базу на (updatedDate) и сохранить структуру даже после того, как в индексе произошли какие-либо изменения (оптимизировать, удалить, обновить)

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

Текущее поведение люцена

для (от 1 до docCount)
if (updatedDate находится в фильтре диапазона дат)
рассчитать счет на основе запроса

Допустимое поведение

для (от 1 до docCount)
if (updatedDate больше верхней границы диапазона дат)
перерыв
еще
рассчитать счет на основе запроса

если у меня есть 3 000 000 документов, и мой диапазон дат соответствует только 20 основным документам, в текущем поведении lucene мне нужно проверить все документы, но при принятом поведении я набираю только 20 лучших документов, и вы можете догадаться о высокой производительности выгода

Ответы [ 3 ]

1 голос
/ 26 ноября 2013

Существующие ответы хороши, но в этом году вышла Lucene 4.3.0 с новым «SortingMergePolicy», который позволяет опытным пользователям Lucene использовать алгоритм, предложенный в оригинальном постере, для преждевременной отмены поиска.См. Javadocs

0 голосов
/ 17 августа 2011
  1. Вы можете отсортировать результаты с помощью modifyDate, см. Этот ответ: Как отсортировать результаты Lucene по значению поля с помощью HitCollector?
  2. если вы действительно любите приключения, вымог бы сделать некоторые настройки забил.http://lucene.apache.org/java/3_3_0/scoring.html

HTH

0 голосов
/ 12 августа 2011

Lucene будет эффективно индексировать и запрашивать числовые поля, см. NumericRangeQuery .Javadoc, на который я ссылался выше, содержит примечания о реализации TrieRangeQuery.

Вы можете сохранить ModifiedDate как NumericField, который содержит дату изменения в виде длинной в мс.Затем используйте QueryWrapperFilter вокруг NumericRangeFilter, чтобы ограничить поиск соответствующим диапазоном дат.

Это должно быть очень эффективным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...