按域名从ElasticSearch获得10个最佳结果

时间:2019-12-09 13:45:00

标签: elasticsearch request

我在ElasticSearch中有五个不同的域,它们已被索引并应用于全文搜索。

如果我执行

之类的GET请求
GET endpoint_to_my_elastic_search/*/_search?q=test

我得到的结果是_score排序的。到目前为止一切顺利,但我想获得一个结果,向我展示每个域的10个最佳匹配(按得分)。我是这样尝试的:

GET endpoint_to_my_elastic_search/domain1/_search?q=test&size=10
GET endpoint_to_my_elastic_search/domain2/_search?q=test&size=10
GET endpoint_to_my_elastic_search/domain3/_search?q=test&size=10
GET endpoint_to_my_elastic_search/domain4/_search?q=test&size=10
GET endpoint_to_my_elastic_search/domain5/_search?q=test&size=10

很好-可以。现在,我在每个域中都有10个最佳结果。但是域的数量将来会增加到10或20。所以我必须向我的ElasticSearch发送20个请求...闻起来像是性能不好;-)

是否可以告诉ElasticSearch从每个请求的域中给我10个最佳结果?

2 个答案:

答案 0 :(得分:2)

几天前,我回答了类似的question-建议使用top_hits aggs。.

更新:_index是一个元字段,因此您可以使用通配符或别名在多个索引中进行查询并将该字段用于agg:

curl -XPOST localhost:9200/index-*/_search?pretty -d '
{
  "aggs": {
    "top_indices": {
      "terms": {
        "field": "_index"
      },
      "aggs": {
        "top_docs": {
          "top_hits": {}
        }
      }
    }
  }
}'

答案 1 :(得分:1)

在Nirmal和Hariharan的帮助下,我获得了正确的JSON,这向我展示了我所有域中的10个最佳结果:

<activity android:name=".motoController"
            android:screenOrientation="landscape"/>