2016-03-24 3 views
0

Я использую Elastic Поиск в узле Js для запроса нескольких индексов, Как получить результаты от каждого из индекса:Как получить результаты поиска из каждого индекса

var esClient = new elasticsearch.Client({host: config.elasticsearch.host}); 

esClient.search({ 
    index: ["abc", "xyz"], 
    type: ["abc", "xyz"], 
    body: { 
     query: { 
      multi_match: { 
       query: q, 
       type: "cross_fields", 
       analyzer: "ac_search_analyzer", 
       operator: op, 
       fields: ["a^4", "b^4", "c^2", "d", "e"] 
      } 
     } 
    }, 
    _sourceInclude: ["a", "b", "c"], 
    size: 10 
}).then(function (resp) { 
    //do something 
} 

Теперь я получаю только все 10 результатов от abc и никаких результатов не получено от xyz. Что мне следует сделать, чтобы сказать 5 результатов от abc и 5 от xyz.

ответ

1

Вы можете использовать msearch, чтобы запросить 5 результатов по каждому из индексов за один раз.

Пример:

client.msearch({ 
     body: [ 
      { _index: "abc", type: "abc"}, 
      { 
       query : { 
        multi_match: { 
         query: q, 
         type: "cross_fields", 
         analyzer: "ac_search_analyzer", 
         operator: op, 
         fields: ["a^4", "b^4", "c^2", "d", "e"] 
        } 
       }, 
       size : 5, 
       _source : ["a", "b", "c"] 
      }, 
      { _index: "xyz", type: "xyz"}, 
      { 
       query : { 
        multi_match: { 
         query: q, 
         type: "cross_fields", 
         analyzer: "ac_search_analyzer", 
         operator: op, 
         fields: ["a^4", "b^4", "c^2", "d", "e"] 
        } 
       }, 
       size : 5, 
       _source : ["a", "b", "c"] 
      } 
     ], 
}).then(function (resp) { 
    console.log(resp); 
}); 

ОБНОВЛЕНО Пример-2

msearch_query ={ 
       query : { 
        multi_match: { 
         query: q, 
         type: "cross_fields", 
         analyzer: "ac_search_analyzer", 
         operator: op, 
         fields: ["a^4", "b^4", "c^2", "d", "e"] 
        } 
       }, 
       size : 5, 
       _source : ["a", "b", "c"] 
      }; 
client.msearch({ 
     body: [ 
      { _index: "test", type: "test"}, 
      msearch_query, 
      { _index: "new", type: "new"}, 
      msearch_query 
     ], 
}).then(function (resp) { 
    console.log(resp); 
}); 
+0

Так что я должен написать поисковый запрос для каждого индекса? Что может быть лучшим программным способом сделать это для нескольких индексов? – Saurabh

+0

Я не уверен, что вы подразумеваете под «лучшим программным способом»? Если запрос отличается для каждого индекса, его нет, но нужно построить запрос для индекса. Если запрос одинаков, вы всегда можете назначить его переменной и повторно использовать его при построении запроса 'msearch'. Не уверен, что это то, о чем вы спрашиваете? см. обновленный пример – keety

+0

@saurabh это не отвечает на вопрос? – keety

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