#java #lucene
#java #lucene
Вопрос:
Я интегрирую функциональность поиска в настольное приложение и использую для этого ванильный Lucene. Приложение обрабатывает (потенциально тысячи) POJO, каждое со своим собственным набором свойств ключа / значения. При сопоставлении моделей между моим приложением и Lucene я изначально думал присвоить каждому POJO документ и добавить свойства в виде полей. Этот подход отлично работает в том, что касается индексации и поиска, но основным недостатком является то, что всякий раз, когда POJO изменяет свои свойства, мне приходится заново индексировать ВСЕ свойства, даже те, которые не менялись, чтобы обновить индекс. Я думал об изменении своего подхода и вместо этого создаю документ для каждого свойства и присваиваю один и тот же идентификатор всем документам из одного и того же POJO. Таким образом, при изменении свойства POJO я только обновляю соответствующий документ без переиндексации всех остальных неизмененных свойств. Я думаю, что graph db Neo4J придерживается аналогичного подхода, когда дело доходит до индексации, но я не совсем уверен. Кто-нибудь может прокомментировать возможное влияние на производительность, запросы и т.д.?
Комментарии:
1. Я борюсь с точно такой же проблемой. Вы нашли лучшее решение для хранения данных между lucene и синхронизацией POJOs?
Ответ №1:
Это зависит в основном от того, что вы хотите вернуть в качестве документа в результате поиска.
Но индексирование довольно дешевое. Действительно ли измененный POJO имеет так много свойств, что переиндексация их всех является серьезной проблемой?
Комментарии:
1. Меня интересует только извлечение одного поля, идентификатора POJO, которое является единственным полем, которое фактически хранится в индексе, все остальные анализируются, но не сохраняются. Проблема не в том, что POJO может иметь много свойств (что, кстати, может случиться, но не часто), а в обновлении многих POJO (что определенно произойдет).
Ответ №2:
Если вы выполняете поиск только по одному полю в каждом поисковом запросе, разделение одного POJO на несколько документов ускорит переиндексацию. Но это вызовет другую проблему, если выполнить поиск по нескольким полям, POJO может появляться много раз. На самом деле, я согласен с EJP, создание индекса происходит очень быстро в небольшом наборе данных.