Правильно ли я предполагаю, что слово "направление" должно быть двунаправленным?
Да.Я исправлю эту опечатку.
Если изменение ассоциаций на двунаправленное не является вариантом, какие возможности мне по-прежнему нужно использовать при hibernate-search?
Если Person
индексируется и встраивает Order
, но Order
не имеет обратной связи с Person
, тогда Hibernate Search не может получить Person
s, которые необходимо переиндексировать при изменении Order
.
Таким образом, вам придется переиндексировать вручную: https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#manual-index-changes.
Вы можете выбрать одну из двух стратегий:
- Простой путь: переиндексировать все
Person
сущностей периодически, например, каждую ночь. - Жесткий путь: переиндексация затронутых
Person
сущностей при каждом изменении Order
.По сути, это означает добавление кода к вашим услугам, чтобы при создании / обновлении / удалении заказа вы выполняли запрос, чтобы получить всех соответствующих лиц и переиндексировать их вручную.
Первое решение довольно простое, но имеет большой недостаток: индекс Person
будет устаревать до 24 часов.В зависимости от вашего варианта использования, это может быть нормально, а может и нет.
Второе решение подвержено ошибкам, и вы в основном выполняете работу Hibernate Search.
В общем, вы действительноСпросите себя, не лучше ли добавить обратную сторону ассоциации к вашей модели.
Можно ли создать два отдельных индекса и объединить запросы?
Технически, если вы используете интеграцию Lucene (а не Elasticsearch), то да, это было бы возможно.
Но:
- вам понадобится выше среднегознание Lucene.
- вам придется обходить API Hibernate Search и писать код, чтобы делать то, что обычно делает Hibernate Search.
- вам придется использовать экспериментальный (читай: нестабильный)API Lucene.
- Я не уверен, насколько хорошо это будет работать, поскольку я никогда не пробовал.
Поэтому я бы не рекомендовал его, если вы не знакомы с Lucene.API-интерфейсы.Если вы действительно хотите пойти по этому пути, вот несколько указателей: