Сортировка по недавнему доступу в Lucene / Solr - PullRequest
6 голосов
/ 13 февраля 2012

В моих запросах Solr я хочу отсортировать последние просмотренные документы по верху («доступ» означает открытие пользователем). Ни один другой критерий поиска не имеет для меня значения: из документов с текстом, соответствующим запросу, я хочу их в порядке недавнего использования. Я могу думать только о двух способах сделать это:

1) Включите поле даты «последний доступ» в каждом документе, чтобы сортировать по Solr. Мне сказали, что поля Trie Date можно сортировать очень быстро. Конечно, проблема в том, чтобы поддерживать поле в актуальном состоянии, что потребовало бы сохранения текста каждого документа, чтобы я мог удалить и повторно добавить любой документ с обновленным полем «последний доступ». Изменяемые поля устранят это, но Lucene / Solr по-прежнему не предлагает изменяемые поля.

2) Кроме того, можно хранить изменяемые даты «последнего доступа» и обновлять их в другой базе данных. Это потребовало бы, чтобы Solr возвратил полный список соответствующих документов, который мог бы быть сотнями тысяч документов. Этот огромный список идентификаторов документов будет сопоставлен с датами в БД, а затем отсортирован. Это будет работать нормально для необычных поисковых терминов, но не для общих, общих поисковых.

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

Есть ли у меня альтернативы?

Ответы [ 3 ]

0 голосов
/ 02 ноября 2013

Вы должны быть в состоянии сделать это с помощью функции атомарного обновления.

http://wiki.apache.org/solr/Atomic_Updates

Эта функция доступна начиная с Solr 4.0.Это позволяет обновлять одно поле в документе без необходимости повторной индексации всего документа.Я знаю об этой функции только из документации.Я сам этим не пользовался, поэтому не могу сказать, насколько хорошо он работает или есть какие-либо подводные камни.

0 голосов
/ 29 ноября 2014

Определенно используйте опцию 1, используя запросы SOLR и обновляя поле lastAccessed по мере необходимости.

Поскольку частичные обновления документов SOLR 4.0 поддерживаются в нескольких вариантах: https://cwiki.apache.org/confluence/display/solr/Updating+Parts+of+Documents

Для вашего приложения кажется, что достаточно простого атомарного обновления.

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

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