2016-12-13 106 views
0

说,我想在我的页面的特定部分显示某些结果。有没有一种方法可以根据我的查询将弹性搜索结果分组。elasticsearch的群组搜索结果

E.g.

1.

GET /my_index/_search 
{ 
"query": { 
    "bool": { 
     "must": [ 
      {"match": {"field1": "value1"}}, 
      {"match": {"field7": "value7"}} 
      ] 
     } 
    } 
} 

2.

GET /my_index/_search 
{ 
"query": { 
    "bool": { 
     "must": [ 
      {"match": {"field2": "value2"}} 
      ] 
     } 
    } 
} 

是有可能这些2组合成一个呼叫到弹性和刚组结果吗?

回答

2

您可以在一个请求发送给多个搜索与Multi Search API

这在NEST暴露

var pool = new SingleNodeConnectionPool(new Uri($"http://localhost:9200")); 
var defaultIndex = "my_index"; 
var connectionSettings = new ConnectionSettings(pool) 
     .DefaultIndex(defaultIndex) 

var client = new ElasticClient(connectionSettings); 

var multiSearchResponse = client.MultiSearch(ms => ms 
    .Index(defaultIndex) 
    .Search<Document>("search1", s => s 
     .AllTypes() 
     .Query(q => q 
      .Match(m => m 
       .Field(f => f.Field1) 
       .Query("value1") 
      ) && q 
      .Match(m => m 
       .Field(f => f.Field7) 
       .Query("value7") 
      ) 
     ) 
    ) 
    .Search<Document>("search2", s => s 
     .AllTypes() 
     .Query(q => q 
      .Bool(b => b 
       .Must(mu => mu 
        .Match(m => m 
         .Field(f => f.Field2) 
         .Query("value2") 
        ) 
       ) 
      ) 
     ) 
    ) 
); 

// get the search responses for one of the searches by name 
var search1Responses = multiSearchResponse.GetResponse<Document>("search1"); 

这将产生以下搜索

POST http://localhost:9200/my_index/_msearch 
{"index":"my_index"} 
{"query":{"bool":{"must":[{"match":{"field1":{"query":"value1"}}},{"match":{"field7":{"query":"value7"}}}]}}} 
{"index":"my_index"} 
{"query":{"bool":{"must":[{"match":{"field2":{"query":"value2"}}}]}}} 
+0

我只是想'MultiSearchAsync(IMultiSearchRequest请求)'和我的'GetResponse '似乎没有得到结果。 'var result = response.GetResponse (“search1”)'works but'var result = response.GetResponse (“search1”)'not。我失踪的任何概念? –

+0

传递给'GetResponse ()'的'T'泛型参数类型应该是一个类型,该文档可以被反序列化为 –

+0

T是与索引为'Index ' –