Использование одного и того же индекса Elasti c из 2 разных приложений с разными структурами пакетов для хранения данных (HibernateSearch + Elasti c) - PullRequest
0 голосов
/ 13 июля 2020

У нас есть Elasti c 5.6.10 HibernateSearch ORM 5.11.4.Final, установленный на одном из наших серверов приложений, и теперь мы планируем использовать тот же экземпляр Elasti c и его индексы через один из наших микросервисов. (весенняя загрузка, но с использованием тех же версий HibernateSearch и Elasti c). Причина в том, что мы планируем хранить данные из обоих этих приложений в едином индексе (поскольку это будут одни и те же данные), чтобы мы могли искать данные друг друга из обоих приложений.

Проблема мы сталкиваемся с квалифицированными именами сущностей. Как и в первом приложении, Entity находится, например, в com.ab c .data.to.FirstAppClassTO, а структура микросервиса похожа на com.ab c .service.model.MicroserviceClassTO (или любой другой тип пакета) . Теперь проблема в том, что мы создаем начальные индексы из нашего первого приложения. Но теперь, если мы попытаемся сделать com.ab c .service.model.MicroserviceClassTO проиндексированным, он создаст новый, или если мы предоставим то же имя индекса, то он переопределит существующий (который был создан из первого application).

Есть ли какой-либо способ в поиске гибернации или Elasti c Search, который мы можем реализовать так, как мы собираемся.

Первое приложение TO и Elasti c Схема :

 @Entity
    @Indexed(index="master_index")
    public class UserTO{

Схема на Elasti c:

{
  "master_client_index" : {
    "aliases" : { },
    "mappings" : {
      "com.abc.pt.svc.data.to.UserTO" : {

TO и схема микросервиса:

@Entity
@Indexed(index = "master_index" )
@Table(name = "USER")
public class MSUserTO implements Serializable {

Схема на Elasti c:

 {
      "master_index" : {
        "aliases" : { },
        "mappings" : {
          "com.abc.project.entity.user.MSUserTO" : {

Пожалуйста, поделитесь способами / концепциями / logi c, предоставленными HibernateSearch / ElasticSearch для достижения sh этого.

1 Ответ

1 голос
/ 13 июля 2020

Это не указано явно в вашем вопросе, но я предполагаю, что проблема заключается в имени сопоставления, которое отличается в ваших двух приложениях?

  • com.abc.pt.svc.data.to.UserTO
  • com.abc.project.entity.user.MSUserTO

Боюсь, что в Hibernate Search 5 нет опции для настройки имени сопоставления. Причина в том, что ... Elasticsearch удалил имена сопоставлений в более поздних версиях. Но поддержка Elasticsearch в Hibernate Search 5 была экспериментальной, а Hibernate Search 5 никогда не будет поддерживать Elasticsearch 6+. . Hibernate Search 6 все еще находится в стадии бета-тестирования, но на данный момент он достаточно стабилен и хорошо протестирован. Однако его API отличается от Hibernate Search 5, поэтому миграция потребует некоторых усилий.

Если вы обновитесь до Hibernate Search 6, вы сможете использовать Elasticsearch 5.6, если хотите, потому что Hibernate Search 6 обрабатывает сопоставление имена по-разному. Просто установите стратегию сопоставления имен типов на index-name, и вы сможете использовать один и тот же индекс из двух разных приложений.

Но у вас также будет возможность перейти на никогда версия Elasticsearch (например, 7.8). Я бы порекомендовал это, потому что Elasticsearch 5.6 подошел к концу один год go и, вероятно, больше не получит исправлений.

...