一尘不染

使用完成提示器时,如何获得没有重复的独特建议?

elasticsearch

我在我的环境中使用Elastic
5.1.1。我已在具有post_hashtags字符串数组的字段名称上选择了完成提示,以对其提出建议。我收到以下针对前缀“ inv”的响应

要求:

POST hashtag/_search?pretty&&filter_path=suggest.hash-suggest.options.text,suggest.hash-suggest.options._source
{"_source":["post_hashtags" ],

"suggest": {
    "hash-suggest" : {
        "prefix" : "inv",
        "completion" : {
            "field" : "post_hashtags"
        }
    }
}

回应:

{
  "suggest": {
    "hash-suggest": [
      {
        "options": [
          {
            "text": "invalid",
            "_source": {
              "post_hashtags": [
                "invalid"
              ]
            }
          },
          {
            "text": "invalid",
            "_source": {
              "post_hashtags": [
                "invalid",
                "coment_me",
                "daya"
              ]
            }
          }
        ]
      }
    ]
  }

此处两次返回“无效”,因为它也是其他文档中相同字段“ post_hashtags”的输入字符串。

问题是,如果相同索引中的1000个文档中存在相同的“无效”输入字符串,那么我将得到1000个重复的建议,这是巨大的并且不需要。

我可以在完成类型的字段上应用聚合吗?

即使我在相同索引的多个文档中为特定字段指定了相同的输入字符串,也可以通过任何方法获得唯一的建议而不是重复的文本字段?


阅读 174

收藏
2020-06-22

共1个答案

一尘不染

ElasticSearch
6.1引入了skip_duplicates运算符。用法示例:

{
  "suggest": {
    "autocomplete": {
      "prefix": "MySearchTerm",
      "completion": {
        "field": "name",
        "skip_duplicates": true
      }
    }
  }
}
2020-06-22