Лучший способ обновления агрегированных объектов в эластичном поиске, микросервисах

#c# #sql-server #elasticsearch #microservices

#c# #sql-сервер #elasticsearch #микросервисы

Вопрос:

У меня есть два микросервиса, один из которых называется Home, содержит метаданные о доме, включая FK, из другого микросервиса с именем Address

Я использую SQL Server для хранения записей сущностей

  • HomeEntity(представляет таблицу в БД) в домашней микросервисе содержит столбцы -> Id, AddressId(FK), price

  • Адресность (представляет таблицу в БД) в адресной микросервисе содержит столбцы -> Id, Street, ZipCode

Я использую эластичный поиск для хранения адреса в отдельном индексе в домашнем микросервисе, и этот индекс всегда обновляется, поскольку адрес MS публикует сообщение об изменении или добавлении адреса.

И у меня есть Get endpoint API в домашнем микросервисе, он должен возвращать что-то вроде

 Home : {
Id: 1,
price : 3000,
Address :{
   id: 1,
   street: "blabla",
   zibcode : 12345

  }
}
  

Поэтому я сохранил их агрегированными в другом индексе в эластичном поиске под названием HomeIndex

Моя проблема, когда один из адресов обновляется, как лучше всего обновлять все документы, прикрепленные к одному и тому же адресу HomeIndex.

в настоящее время я использую _update_by_query есть ли какой-нибудь способ обновлять HomeIndex с последними изменениями адреса?

Комментарии:

1. для меня _update_by_query — лучшая практика для вашего варианта использования. У вас будет очень мало домов с одинаковым адресом, поэтому обновление по запросу должно быть очень быстрым

2. У меня есть другой случай с тем же сценарием, но это может повлиять на 100k или более документов в индексе!

3. Вы можете, если ваш вариант использования действительно совпадает, подумать о родительском дочернем элементе. Обычно это не очень хорошая практика. Но если у вас большая мощность и много обновлений на неправильной стороне, это может быть хорошим решением elastic.co/guide/en/elasticsearch/client/net-api/current /…