Как динамически создать индекс для свойств объекта JSON (реквизиты объекта JSON также являются динамическими) - PullRequest
0 голосов
/ 26 июня 2019

У меня есть сценарий, в котором я хочу динамически создать индекс для ключей объекта JSON (атрибуты объекта JSON могут отличаться). Я могу сохранить объект JSON как индекс (путем реализации FieldBridge).

eg1: preference:{"sport":"football", "music":"pop")
eg2: preference:{"sport":"cricket", "music":"jazz", "cuisine":"mexican"}

Но я не могу запросить отдельные поля, такие как: preference.sport или preference.cuisine

Есть ли какой-либо способ / конфигурация в поиске гибернации, с помощью которого мы можем достичь этого?

1 Ответ

0 голосов
/ 26 июня 2019

Если ваши поля динамические, предопределенной схемы нет, и Hibernate Search не может определить, как запросить эти поля.Существуют значительные различия в способе выполнения запроса на совпадение, например, в текстовом поле или поле даты.

По этой причине вы не можете использовать DSL Hibernate Search Query для построения ваших запросов.

Однако вы можете использовать нативные API.

Если вы используете интеграцию Lucene, простое создание соответствующих запросов будет работать нормально (если вы создадите правильный):

new TermQuery(new Term("sport", "value"))

Если вы используете экспериментальную интеграцию Elasticsearch, вы можете использовать org.hibernate.search.elasticsearch.ElasticsearchQueries.fromJson( ... ).Вы должны будете написать весь запрос как JSON, и вообще не сможете использовать Hibernate Search QueryBuilder даже для запросов к статически определенным полям.См. https://docs.jboss.org/hibernate/search/5.11/reference/en-US/html_single/#_queries

Улучшенная поддержка собственных запросов, а также динамических полей с предопределенными типами, которые можно было бы нацеливать в Query DSL, планируется для Hibernate Search 6, но пока не существует.См. HSEARCH-3273 .

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