2016-11-15 2 views
2

Моя цель состоит в том, чтобы послать 3 отдельных запросов в одном запросе ES с помощью multiple searchElasticSearch Nest Msearch сноска не приносит все результаты

Я использую клиент NEST для отправки запроса на упругом поиска с помощью функции ниже

IElasticClient _elasticClient.LowLevel.Msearch<string>(query).Body; 

Переходя в качестве исходного запроса с помощью завиток команда работает абсолютно нормально, но NEST MSearch возвращает только «event_results» и «venue_results», но не «location_results»

curl -XPOST localhost:9200/_msearch -d ' 
{"index" : "search_results"} 
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "name": "manchester" } } ] } }, "aggs": { "event_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } } 
{"index" : "search_results2"} 
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "venueName": "Manchester" } } ] } }, "aggs": { "venue_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } } 
{"index" : "search_results3"} 
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "venueTown": "manchester" } } ] } }, "aggs": { "location_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } } 
' 

Кто-нибудь из вас знает, где может быть проблема?

ответ

0

Проблема заключается в отступлении. Попробуйте следующее:

public static string qu = @"{""index"" : ""search_results""} 
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""name"": ""manchester"" } } ] } }, ""aggs"": { ""event_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } } 
{""index"" : ""search_results2""} 
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""venueName"": ""Manchester"" } } ] } }, ""aggs"": { ""venue_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } } 
{""index"" : ""search_results3""} 
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""venueTown"": ""manchester"" } } ] } }, ""aggs"": { ""location_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } } 
"; 

var result = _elasticClient.LowLevel.Msearch<string>(qu).Body; // Query ES for results. 
3

По возможности, вы не хотите использовать материал «LowLevel». Вместо этого используйте то, что доступно вам на IElasticClient. Ниже приведен пример использования IElasticClient.MultiSearch для запуска 3 запросов с использованием свободного синтаксиса (что является предпочтительным способом для этого).

var mSearchResponse = ElasticClient.MultiSearch(msearch => msearch 
    .Search<RedemptionES>(
     s1 => s1.Query(
      q=>q.Term(
       t=> t.OnField(f=> f.Id).Value("123") 
      ) 
     ) 
    ) 
    .Search<RedemptionES>(
     s2 => s2.Query(
      q => q.Term(
       t => t.OnField(f => f.Id).Value("456") 
      ) 
     ) 
    ) 
    .Search<RedemptionES>(
     s3 => s3.Query(
      q => q.Term(
       t => t.OnField(f => f.Id).Value("789") 
      ) 
     ) 
    ) 
); 
+0

Мой запрос массивный, и преобразование в синтаксис IELasticSearch занимает много времени, и команда elasticsearch, как правило, меняет синтаксис, поэтому его сложнее поддерживать. Можно ли получить те же результаты, но используя необработанный запрос? – ProgLearner

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