elasticsearch完成建议器产生重复结果

vin*_*t17 6 autocomplete elasticsearch search-suggestion

我正在使用弹性搜索完成建议,并且遇到了一些问题,它总是产生类似的结果.

假设我使用以下语句进行搜索:

    "my_suggestion": {
>         "text": "ni",
>         "completion": {
>             "field": "my_name_for_sug"
>         }
>     }
Run Code Online (Sandbox Code Playgroud)

并获得以下结果:

 "my_suggestion" : [ {
    "text" : "ni",
    "offset" : 0,
    "length" : 2,
    "options" : [ {
      "text" : "Nine West",
      "score" : 329.0
    }, {
      "text" : "Nine West ",
      "score" : 329.0
    }, {
      "text" : "Nike",
      "score" : 295.0
    }, {
      "text" : "NINE WEST",
      "score" : 168.0
    }, {
      "text" : "NINE WEST ",
      "score" : 168.0
    } ]
  } ],
Run Code Online (Sandbox Code Playgroud)

所以问题是如何合并或汇总相同的结果,如"NINE WEST"和"NINE WEST".

映射是:

    "my_name_for_sug": {
         "type": "completion"
        ,"analyzer": "ik_max_word"
        ,"search_analyzer": "ik_max_word"
        ,"payloads": true
        ,"preserve_separators": false  
    }
Run Code Online (Sandbox Code Playgroud)

其中ik_max_word是一个特定于中国的分析仪,它可以完成标准分析仪的工作.

谢谢

Arc*_*ena 0

Elastic Suggesters 自动删除相同输出的重复项(至少到 2.x 为止)。我还没有尝试过 5.x,那里的建议器有一些变化。问题似乎出在您的索引分析器上,它正在对您的文档建立索引,以便:

"text" : "Nine West", "text" : "Nine West ", "text" : "NINE WEST", "text" : "NINE WEST ", 并不完全相同。您需要使用分析器对它们进行索引,该分析器会小写标记,并去除多余的空格等。一旦您这样做,您应该会获得重复的建议输出,如您所愿。