Elasticsearch - 过滤字符串数组,然后仅聚合相关关键字

时间:2021-07-23 16:07:15

标签: elasticsearch elasticsearch-aggregation

我有一个包含关键字列表的属性的索引。

假设我的文档如下所示:

{
  "product_name": "Iphone",
  "keywords" : ["Best seller", "Apple", "Black", "Awesome"]
}
{
  "product_name": "Galaxy S21",
  "keywords" : ["Awesome", "Android"]
}

我想让我的用户对关键字进行自动补全(比如建议),但我也想对建议进行聚合,让他们知道有多少文档与每个匹配。

所以如果用户输入“A”,我们应该返回 3 个结果:

{"expression": "Android", "count": 1}
{"expression": "Apple", "count": 1}
{"expression": "Awesome", "count": 2}

“Best Seller”/“Black”不应作为 Elasticsearch 的结果返回。

没有映射约束。

我尝试过类似下面的查询,但聚合中返回了意外的关键字:

{
  "query": {
    "multi_match": {
      "query": "a",
      "fields": ["keywords"],
      "type": "bool_prefix"
    }
  },
  "size": 0,
  "aggs": {
    "matched_keywords": {
      "terms": {
        "field": "keywords",
        "size": 10
      }
    }
  }
}

任何解决方案/建议都会有所帮助。

谢谢。

0 个答案:

没有答案
相关问题