ElasticSearch NEST Поиск нескольких типов и всех полей

Используя ElasticSearch NEST, у меня возникают проблемы с получением ожидаемых результатов от моих запросов. Мой индекс/тип выглядит следующим образом:

  • театры (индекс)
    • событие (типы)
    • театр
    • продвижение
    • общий контент

Каждый из этих типов имеет свои собственные поля, и я использую метод NEST Index() для индексации данных. Я могу проверить, что он правильно индексируется:

  • Глядя на http://localhost:9200/theatres/_mapping
  • Использование плагина Head для просмотра данных

Для справки, вот моя конфигурация клиента:

// TODO: Put settings in config
var node = new Uri("http://localhost:9200");
var connSettings = new ConnectionSettings(node);
connSettings.SetDefaultIndex("theatres");
connSettings.ThrowOnElasticsearchServerExceptions();

var client = new ElasticClient(connSettings);

Запрос

Теперь для запроса я хочу искать все типы и все поля в индексе. Используя плагин Head, я могу сгенерировать запрос и получить ожидаемые результаты: enter image description here

Используя этот запрос, который он сгенерировал, я попробовал следующий запрос NEST:

var query = "waukesha"; // This would be passed in

var resp = client.Search<dynamic>(s => s
   .From(0)
   .Take(10)
   .Query(qry => qry
       .Bool(b => b
       .Must(m => m
           .QueryString(qs => qs
               .DefaultField("_all")
               .Query(query))))));

Однако это дает мне другой результат. Является ли NEST чем-то за кулисами, о котором я не знаю? Или это не поддерживается?

Ответ 1

Ваш запрос отсутствует .AllTypes()

Вы также можете указать несколько типов, используя .Types("type1", "type1")

Итак:

var query = "waukesha"; // This would be passed in

var resp = client.Search<dynamic>(s => s
   .AllTypes()
   .From(0)
   .Take(10)
   .Query(qry => qry
       .Bool(b => b
       .Must(m => m
           .QueryString(qs => qs
               .DefaultField("_all")
               .Query(query))))));