elasticsearch 当我使用completion suggester时,如何获得没有重复项的独特建议?,elasticsearch,lucene,search-suggestion,elasticsearch,Lucene,Search Suggestion" /> elasticsearch 当我使用completion suggester时,如何获得没有重复项的独特建议?,elasticsearch,lucene,search-suggestion,elasticsearch,Lucene,Search Suggestion" />

elasticsearch 当我使用completion suggester时,如何获得没有重复项的独特建议?

elasticsearch 当我使用completion suggester时,如何获得没有重复项的独特建议?,elasticsearch,lucene,search-suggestion,elasticsearch,Lucene,Search Suggestion,我正在我的环境中使用elastic 5.1.1。我在一个字段名post_hashtags上选择了completion suggester,它包含一个字符串数组,可以对其进行建议。我得到的回应如下前缀“inv” 请求: 答复: { "suggest": { "hash-suggest": [ { "options": [ { "text": "invalid", "_source": {

我正在我的环境中使用elastic 5.1.1。我在一个字段名
post_hashtags
上选择了completion suggester,它包含一个字符串数组,可以对其进行建议。我得到的回应如下前缀“inv”

请求:

答复:

{
  "suggest": {
    "hash-suggest": [
      {
        "options": [
          {
            "text": "invalid",
            "_source": {
              "post_hashtags": [
                "invalid"
              ]
            }
          },
          {
            "text": "invalid",
            "_source": {
              "post_hashtags": [
                "invalid",
                "coment_me",
                "daya"
              ]
            }
          }
        ]
      }
    ]
  }
此处“invalid”返回两次,因为它也是其他文档中同一字段“post_hashtags”的输入字符串

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

我可以在类型为completion的字段上应用聚合吗

是否有任何方法可以让我得到唯一的建议,而不是重复的文本字段,即使我在多个索引相同的文档中为特定字段提供了相同的输入字符串?

编辑:此答案仅适用于Elasticsearch 5

否,您不能消除重复的建议结果。在Elasticsearch 5中,autocomplete suggester面向文档,因此将返回所有匹配文档的建议

在Elasticsearch 1和2中,自动完成建议器会自动消除重复的建议。有一个开放的Github票证,它看起来像是在未来的版本中

目前,您有两个选择:

  • 使用Elasticsearch版本1或2
  • 使用不基于自动完成建议器的其他建议实现。到目前为止,我所看到的唯一一个半官方的建议是把你的建议串在一个字符串中

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

    {
      "suggest": {
        "autocomplete": {
          "prefix": "MySearchTerm",
          "completion": {
            "field": "name",
            "skip_duplicates": true
          }
        }
      }
    }
    
    这个答案可能有助于:
    {
      "suggest": {
        "autocomplete": {
          "prefix": "MySearchTerm",
          "completion": {
            "field": "name",
            "skip_duplicates": true
          }
        }
      }
    }