2016-11-18 3 views
0

Использование C# NEST API на Elasticsearch:Elasticsearch NEST API - запрос правильный индекс

var searchResults = client.Search<Product>(s => s 
       .Index(Constants.ElasticSearchIndex) 
       .Query(q => q 
        .Raw(jsonRequest) 
       ) 
      ); 

Запрос должен работать на/sc_all/индекса, но он работает на/sc_all/продукта/индекс (который не существует -/product/кажется добавленным из-за поиска, поскольку T = произведение).

Если я, как это,/продукт/заменяется значением константы, т.е./sc_all/продукта/=>/sc_all/constant_value /:

var searchResults = client.Search<Product>(s => s 
       .Index(Constants.ElasticSearchIndex) 
       .Type(Constants.ElasticSearchType) 
       .Query(q => q 
        .Raw(jsonRequest) 
       ) 
      ); 

Что я должен делать, если я просто хотите запросить/sc_all/и ничего больше?

Спасибо! Запрос


Json:

"{\" отфильтрованного \ ": {\" запрос \ ": {\" match_all \ ": {}}, \" фильтр \ ": {\" вложенными \ ": {\" путь \ ": \" products \ ", \" filter \ ": {\" вложенные \ ": {\" путь \ ": \" products.da \ ", \" filter \ ": {\ "bool \": {\ "must \": [{\ "query \": {\ "query_string \": {\ "default_field \": \ "products.da.content \", \ "query \ ": \" kildemoes \ "}}}}}}}}}}}}, \" from \ ": 0, \" size \ ": 100"

ответ

1

Вам просто нужно указать, чтобы работать во всех типах с .AllTypes()

var jsonRequest = "{ \"match_all\": {} }"; 

var searchResults = client.Search<Product>(s => s 
         .Index(Constants.ElasticSearchIndex) 
         .AllTypes() 
         .Query(q => q 
          .Raw(jsonRequest) 
         ) 
        ); 

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

POST http://localhost:9200/sc_all/_search 
{ 
    "query": { "match_all": {} } 
} 

Имейте в виду, что любые документы, возвращенные попытается десериализовать в экземпляры Product так что если вы будете таргетинг на несколько различных типов, вы можете использовать общий базового типа или dynamic и дополнительно используйте covariant search results.

+0

Спасибо, но мой запрос Json уже содержит «match_all». Я добавил его к моему вопросу выше. – Louisa

+0

@ Louisa Я думаю, вы пропустили точку - если вы укажете '.AllTypes()' в теле запроса поиска, то вы будете искать по всем типам в индексе 'Constants.ElasticSearchIndex'. Я добавил примерное значение для 'jsonRequest', поэтому код, который вы указали, будет скомпилирован. –

+0

Хорошая точка. Спасибо за разъяснения. – Louisa

Смежные вопросы