Как выполнить поиск по нескольким индексам, которые содержат разные типы документов, используя Nest ElasticSearch 6.x?

#elasticsearch #nest

#elasticsearch #гнездо

Вопрос:

У меня есть два индекса, каждый из которых имеет свой собственный вид (разные формы) документа, но у меня есть требование, чтобы результаты поиска включали оба этих типа документов.

Из того, что я прочитал, что мне нужно сделать, это ковариантный поиск по двум индексам, поиск по нескольким индексам совсем не кажется сложным, но я понятия не имею, как выполнить ковариантный поиск в Elasticsearch 6.x. Все ответы на другие вопросы здесь SO для более старых версий,и документация по этому вопросу очень ограничена.

https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/covariant-search-results.html

Ответ №1:

В 5.x и ниже ковариантный поиск может быть реализован путем проверки типа каждого документа и десериализации соответствующего .Тип СЕТИ. Поскольку типы удаляются из Elasticsearch, ковариантный поиск в 6.x становится немного сложнее, и мы можем по существу использовать один из двух подходов

  1. Используйте общий тип, который может представлять обе формы документа и десериализовать все свойства обоих типов. Это может быть что-то вроде Dictionary<string, object> or Json.NET’s JObject

  2. Используйте сериализатор, который может десериализовать производные типы до общего базового типа на основе свойств в JSON. Например, с помощью Json.NET обрабатывает TypeNameHandling для включения $type поля дискриминатора в JSON, которое позже можно использовать для десериализации до правильного типа.