如何在ElasticSearch抽取查询中返回多个搜索字符串的多个命中计数?

hpcdzsge  于 2022-11-28  发布在  ElasticSearch
关注(0)|答案(1)|浏览(154)

这是一种多对多查询。
我想在一个查询中合并多个搜索字符串,并希望得到每个字符串的命中计数。例如:
“苹果”、“橙子”、“菠萝”
我要他们每个人的人数。
目前,我已经写了OR查询,但这违背了目的。OR查询结合了一切,命中计数是所有搜索字符串的累积,但我想要一个命中计数专门为每个搜索字符串。

6yt4nkrj

6yt4nkrj1#

Tldr;

Elasticsearch不是一个关系数据库,试图实现RDBMS行为最终注定会失败。
但话虽如此,如果你只是想计算一系列terms的数量,你应该研究一下elasticsearch的aggregation feature
如果您确实想执行搜索查询,可以尝试使用msearchapi,它允许您使用单个调用向elasticsearch发送多个查询。

溶液(聚合物)

GET <index name>/_search
{
  "size": 0,
  "query": {
    "terms": {
      "fruits": [
        "Apple",
        "Orange",
        ...
      ]
    }
  },
  "aggs": {
    "NAME": {
      "terms": {
        "field": "fruits",
        "size": 10
      }
    }
  }
}

解决方案(msearch)

GET <index name>/_msearch
{ }
{"query": {"terms": {"fruits": ["Apple"]}}}
{}
{"query": {"terms": {"fruits": ["Orange"]}}}
...

相关问题