Я использую ElasticSearch 6.5, чтобы выполнить поиск по паре индексов.Я попытаюсь объяснить сценарий: у меня мультитенантное приложение, в котором клиенты могут искать товары.Существуют общие продукты и продукты арендатора.
Я храню общие продукты в отдельном индексе A, доступном только для чтения, они составляют около 2 миллионов.У каждого арендатора также есть «свое место» в индексе B, куда он может добавлять свои собственные продукты.
Арендаторы могут копировать общий продукт в свой собственный индекс.Во время поиска мне нужно отфильтровать данные из обоих индексов (A и B), удалив дубликаты, но индекс B должен иметь приоритет над индексом A => это означает, что если продукт копируется из индекса A в B, во время поиска отображается версия B,Другими словами, B-версия продукта должна «переопределять» A-версию.
Сейчас я использую ES-фильтры (https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html), потому что мне не нужна оценка и мои поискиточный, и я хочу получить быстрый ответ. Фильтры также кэшируются, и это улучшает взаимодействие с пользователем в моем приложении.
Я знаю, что могу использовать дедупликацию для нескольких индексов следующим образом:
POST http://myElastic.com/test/e1,e2,e3/_search
{
"aggs":{
"dedup" : {
"terms":{
"field": "id"
},
"aggs":{
"dedup_docs":{
"top_hits":{
"size":1
}
}
}
}
}
}
Я хотел бы знать, как отдавать приоритет индексу B., продолжающему использовать фильтры вместо запросов (которые имеют оценки). Кроме того, я хотел бы знать, работают ли нумерация страниц и сортировка правильно в этом случае, когда ES должен объединять несбалансированные данные из несколькихиндексы (в индексе A у меня 2 миллиона продуктов, в индексе B часть продуктов A, которые должны их переопределять, плюс пользовательские продукты арендатора).