Индексная стратегия для документов с тегами, где теги могут часто меняться - PullRequest
0 голосов
/ 30 июля 2010

В дополнение к текстовому содержимому в моих документах есть теги, которые также можно искать.Теперь проблема в том, что теги меняются довольно часто, и каждый раз, когда тег добавляется или удаляется, мне приходится вызывать UpdateDocument, что довольно медленно, когда выполняется для сотен документов.что часто меняется и нужно искать с Lucene?Я думал о том, чтобы сохранить теги в отдельных документах, чтобы они были меньше, но я не могу понять, как быстро искать теги И контент.

1 Ответ

4 голосов
/ 30 июля 2010

Сохраните пары [tag, UID] в реляционной базе данных.Каждый раз, когда тег добавляется или обновляется, он добавляется и обновляется в этой таблице в базе данных.

При выполнении поиска Lucene, который включает как данные тега (хранящиеся в базе данных), так и контент (проиндексированный в Lucene)вам нужно будет объединить результаты вместе.Один из способов сделать это:

  1. Сделать запрос к базе данных, чтобы получить все UID для рассматриваемого тега
  2. Перевести все UID в идентификаторы документов Lucene и установитьбит в BitSet для каждого соответствующего идентификатора документа Lucene
  3. Создайте фильтр, который упаковывает BitSet, и передайте этот фильтр в ваш поиск.

Мы реализовали этот подход в нашей системе,и это работает хорошо.Возможно, вам придется поместить кеш перед базой данных из соображений производительности.Детали шага (3) будут зависеть от того, какую версию Lucene вы используете.

...