Как обрабатывать очень частые обновления индекса Lucene

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

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

  2. Мне нужно отбрасывайте старые документы на довольно регулярной основе, чтобы гарантировать, что результаты поиска не датированы.

  3. И последнее, но не менее важное: приложение поиска должно реагировать. (задержка порядка 100 миллисекунд и должна поддерживать не менее 10 qps)

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

Вот несколько вопросов,

а. Я читал, что метод optimize () в классе IndexWriter стоит дорого и не должен использоваться приложениями, которые производят частые обновления; каковы альтернативы?

b. Чтобы выполнять инкрементные обновления, мне нужно продолжать фиксировать новые данные, а также постоянно обновлять средство чтения индекса, чтобы убедиться, что в нем есть новые данные. Это повлияет на пункты 1 и 3 выше. Стоит ли пробовать дублировать индексы? Какие общие подходы к решению этой проблемы?

c. Я знаю, что Lucene предоставляет метод удаления, который позволяет вам удалить все документы, соответствующие определенному запросу, в моем случае мне нужно удалить все документы, которые старше определенного возраста, теперь один из вариантов - добавить поле даты к каждому документ и используйте его для удаления документов позже. Можно ли выполнять запросы диапазона по идентификаторам документов (я могу создать собственное поле идентификатора, поскольку я думаю, что поле, созданное lucene, постоянно меняется) для удаления документов? Это быстрее, чем сравнение дат, представленных в виде строк?

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

9
задан fsm 30 September 2010 в 21:15
поделиться