У нас есть требование для поиска данных по нескольким индексам. Мы попытались объединить их в единое целое с помощью поисковой системы hibernate, все прошло хорошо, но этот сводный индекс не обновляется после обновления фактической таблицы базы данных. Хотя отдельные индексы успешно обновляются. Таким образом, мы должны изменить нашу стратегию с hibernate orm на упругий поиск java api.
Чтобы достичь этого, я подумал, смогу ли я получить какую-либо логику для объединения трех разных индексов в один, прежде чем запускать поисковый запрос. Чтобы я мог получить данные из всех трех индексов. Эти индексы имеют общее поле, которое можно рассматривать как поле идентификатора. Могу ли я связать их в этом поле идентификатора и получить реляционные данные из этих индексов, после объединения их в один.
Ниже приведено определение индекса для трех индексов, которые я хочу объединить.
basclt0100:
{
"basclt0100" : {
"aliases" : { },
"mappings" : {
"com.csc.pt.svc.data.to.Basclt0100TO" : {
"dynamic" : "strict",
"properties" : {
"clientname" : {
"type" : "text",
"store" : true,
"analyzer" : "nameAnalyzer"
},
"cltseqnum" : {
"type" : "long",
"store" : true
},
"firstname" : {
"type" : "text",
"store" : true,
"analyzer" : "nameAnalyzer"
},
"id" : {
"type" : "keyword",
"store" : true
},
"longname" : {
"type" : "text",
"store" : true,
"analyzer" : "nameAnalyzer"
},
"midname" : {
"type" : "text",
"store" : true
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "5",
"provided_name" : "basclt0100",
"creation_date" : "1536086417001",
"analysis" : {
"analyzer" : {
"nameAnalyzer" : {
"filter" : [
"lowercase"
],
"tokenizer" : "keyword"
}
}
},
"number_of_replicas" : "1",
"uuid" : "YKCtVIaCQjatBeb2g1JfUA",
"version" : {
"created" : "6030299"
}
}
}
}
}
basclt0300
{
"basclt0300" : {
"aliases" : { },
"mappings" : {
"com.csc.pt.svc.data.to.Basclt0300TO" : {
"dynamic" : "strict",
"properties" : {
"addrln1" : {
"type" : "text",
"store" : true,
"analyzer" : "addressAnalyzer"
},
"addrln2" : {
"type" : "text",
"store" : true,
"analyzer" : "addressAnalyzer"
},
"addrln3" : {
"type" : "text",
"store" : true
},
"addrseqnum" : {
"type" : "text",
"store" : true
},
"city" : {
"type" : "text",
"store" : true,
"analyzer" : "addressAnalyzer"
},
"cltseqnum" : {
"type" : "long",
"store" : true
},
"country" : {
"type" : "text",
"store" : true,
"analyzer" : "addressAnalyzer"
},
"id" : {
"type" : "keyword",
"store" : true
},
"state" : {
"type" : "text",
"store" : true
},
"zipcode" : {
"type" : "text",
"store" : true,
"analyzer" : "addressAnalyzer"
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "5",
"provided_name" : "basclt0300",
"creation_date" : "1536086426461",
"analysis" : {
"analyzer" : {
"addressAnalyzer" : {
"filter" : [
"standard",
"lowercase",
"asciifolding"
],
"tokenizer" : "standard"
}
}
},
"number_of_replicas" : "1",
"uuid" : "irxvUu2qR3udpgJUE0NoSA",
"version" : {
"created" : "6030299"
}
}
}
}
}
basclt0900
{
"basclt0900" : {
"aliases" : { },
"mappings" : {
"com.csc.pt.svc.data.to.Basclt0900TO" : {
"dynamic" : "strict",
"properties" : {
"cltseqnum" : {
"type" : "long",
"store" : true
},
"email1" : {
"type" : "text",
"store" : true,
"analyzer" : "emailAnalyzer"
},
"email2" : {
"type" : "text",
"store" : true,
"analyzer" : "emailAnalyzer"
},
"id" : {
"type" : "keyword",
"store" : true
}
}
}
},
"settings" : {
"index" : {
"number_of_shards" : "5",
"provided_name" : "basclt0900",
"creation_date" : "1536086423657",
"analysis" : {
"analyzer" : {
"emailAnalyzer" : {
"filter" : [
"lowercase"
],
"tokenizer" : "classic"
}
}
},
"number_of_replicas" : "1",
"uuid" : "dmzw9ZswTwCNVvne-FAt2w",
"version" : {
"created" : "6030299"
}
}
}
}
}
, пожалуйста, помогите с какой-нибудь йогой / стратегией для достижения этой цели.
Еще раз мы хотели бы выполнить поиск по всем полям этих трех индексов и извлечь соответствующие данные для поиска. Первичным ключом будет cltseqnum, доступный по всем трем индексам.