Я пытаюсь создать прототип приложения для индексации / поиска, которое использует очень изменчивые источники данных индексации (форумы, социальные сети и т. д.), вот некоторые из требований к производительности,
Очень быстрое время обработки (я имею в виду, что любые новые данные (например, новое сообщение на форуме) должны появиться в результатах поиска очень скоро (менее минуты))
Мне нужно отбрасывайте старые документы на довольно регулярной основе, чтобы гарантировать, что результаты поиска не датированы.
И последнее, но не менее важное: приложение поиска должно реагировать. (задержка порядка 100 миллисекунд и должна поддерживать не менее 10 qps)
Все требования, которые у меня есть в настоящее время, могут быть выполнены без использования Lucene (и это позволило бы мне удовлетворить все 1,2 и 3), но я предвижу другие требования в будущем (например, релевантность поиска и т. д.), которые Lucene упрощает для реализации. Однако, поскольку Lucene разработан для более сложных случаев использования, чем тот, над которым я сейчас работаю, мне трудно удовлетворить мои требования к производительности.
Вот несколько вопросов,
а. Я читал, что метод optimize () в классе IndexWriter стоит дорого и не должен использоваться приложениями, которые производят частые обновления; каковы альтернативы?
b. Чтобы выполнять инкрементные обновления, мне нужно продолжать фиксировать новые данные, а также постоянно обновлять средство чтения индекса, чтобы убедиться, что в нем есть новые данные. Это повлияет на пункты 1 и 3 выше. Стоит ли пробовать дублировать индексы? Какие общие подходы к решению этой проблемы?
c. Я знаю, что Lucene предоставляет метод удаления, который позволяет вам удалить все документы, соответствующие определенному запросу, в моем случае мне нужно удалить все документы, которые старше определенного возраста, теперь один из вариантов - добавить поле даты к каждому документ и используйте его для удаления документов позже. Можно ли выполнять запросы диапазона по идентификаторам документов (я могу создать собственное поле идентификатора, поскольку я думаю, что поле, созданное lucene, постоянно меняется) для удаления документов? Это быстрее, чем сравнение дат, представленных в виде строк?
Я знаю, что это очень открытые вопросы, поэтому я не ищу подробного ответа, я постараюсь рассматривать все ваши ответы как предложения и использовать их для обоснования своего дизайна. Спасибо! Сообщите мне, если вам понадобится дополнительная информация.