2016-12-13 5 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

Вы можете отправить несколько запросов в одном запросе с 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 request) 'и мой' GetResponse ', похоже, не получил результат. 'var result = response.GetResponse (" search1 ")' работает, но 'var result = response.GetResponse (" search1 ")' не делает. Любая концепция, которую я пропускаю? –

+0

Тип универсального параметра 'T', переданный в' GetResponse () 'должен быть типом, который можно десериализовать документ до –

+0

. T - это тот же тип, который был проиндексирован индексом« Index ' –

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