hibernate-поиск однонаправленных ассоциаций - PullRequest
0 голосов
/ 11 декабря 2018

Согласно spec , когда @ IndexedEmbedded указывает на сущность, связь должна быть направленной, а другая сторона должна быть аннотирована @ContainedIn.Если нет, Hibernate Search не может обновить корневой индекс при обновлении связанной сущности .

Правильно ли я предположить, что слово directional должно быть bi-направленный ?У меня точно проблема в том, что мой индекс не обновляется.У меня однонаправленные отношения, например, человек на заказ, но этот человек не знает человека.Теперь, когда я изменяю порядок, индекс не обновляется.

Если изменение связей на двунаправленное не является вариантом, какие возможности мне по-прежнему нужно использовать при поиске в спящем режиме?Можно ли создать два отдельных индекса и объединить запросы?

1 Ответ

0 голосов
/ 11 декабря 2018

Правильно ли я предполагаю, что слово "направление" должно быть двунаправленным?

Да.Я исправлю эту опечатку.

Если изменение ассоциаций на двунаправленное не является вариантом, какие возможности мне по-прежнему нужно использовать при 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.

Вы можете выбрать одну из двух стратегий:

  1. Простой путь: переиндексировать все Person сущностей периодически, например, каждую ночь.
  2. Жесткий путь: переиндексация затронутых Person сущностей при каждом изменении Order.По сути, это означает добавление кода к вашим услугам, чтобы при создании / обновлении / удалении заказа вы выполняли запрос, чтобы получить всех соответствующих лиц и переиндексировать их вручную.

Первое решение довольно простое, но имеет большой недостаток: индекс Person будет устаревать до 24 часов.В зависимости от вашего варианта использования, это может быть нормально, а может и нет.

Второе решение подвержено ошибкам, и вы в основном выполняете работу Hibernate Search.

В общем, вы действительноСпросите себя, не лучше ли добавить обратную сторону ассоциации к вашей модели.

Можно ли создать два отдельных индекса и объединить запросы?

Технически, если вы используете интеграцию Lucene (а не Elasticsearch), то да, это было бы возможно.

Но:

  • вам понадобится выше среднегознание Lucene.
  • вам придется обходить API Hibernate Search и писать код, чтобы делать то, что обычно делает Hibernate Search.
  • вам придется использовать экспериментальный (читай: нестабильный)API Lucene.
  • Я не уверен, насколько хорошо это будет работать, поскольку я никогда не пробовал.

Поэтому я бы не рекомендовал его, если вы не знакомы с Lucene.API-интерфейсы.Если вы действительно хотите пойти по этому пути, вот несколько указателей:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...