elasticsearch 如何启用elasticsearch自动完成仅返回匹配词,elasticsearch,autocomplete,elasticsearch,Autocomplete" /> elasticsearch 如何启用elasticsearch自动完成仅返回匹配词,elasticsearch,autocomplete,elasticsearch,Autocomplete" />

elasticsearch 如何启用elasticsearch自动完成仅返回匹配词

elasticsearch 如何启用elasticsearch自动完成仅返回匹配词,elasticsearch,autocomplete,elasticsearch,Autocomplete,我需要实现自动完成,但我不确定确切的策略。例如,我有以下产品: Highsound Smart Phone Watch for Android (Gray) 因此,当用户开始键入:“s”、“sm”、“smar”,就会出现“smart”或“smart watch”,而不是整个短语:安卓Highsound智能手机手表(灰色) 我环顾了一下谷歌、亚马逊等公司是如何做到这一点的,他们不会显示整个匹配记录,而是只显示单词(“智能”)或短语(“智能手表”) 现在,我根据以下链接在elasticsearch

我需要实现自动完成,但我不确定确切的策略。例如,我有以下产品:

Highsound Smart Phone Watch for Android (Gray)
因此,当用户开始键入:
“s”、“sm”、“smar”
,就会出现
“smart”
“smart watch”
,而不是整个短语:
安卓Highsound智能手机手表(灰色)

我环顾了一下谷歌、亚马逊等公司是如何做到这一点的,他们不会显示整个匹配记录,而是只显示单词(“智能”)或短语(“智能手表”)

现在,我根据以下链接在elasticsearch中启用automcomplete,但它返回匹配记录的全名


有什么建议吗

这是意料之中的。你把里面的东西拿回来。您可以使用仅返回匹配的单词

{
  "query": {
    "match_phrase": {
      "name": "sm"
    }
  },
  "highlight": {
    "fields": {
      "name": {
        "fragment_size": 1,
        "number_of_fragments": 2
      }
    }
  }
}
我使用了\u片段的数量:2,以防有多个以sm开头的单词。您还可以根据需要更改片段大小。在这一点上,你会得到这样的结果,然后你可以使用高亮部分作为前端

"hits": {
    "total": 1,
    "max_score": 0.6349302,
    "hits": [
      {
        "_index": "my_index",
        "_type": "my_type",
        "_id": "5",
        "_score": 0.6349302,
        "_source": {
          "name": "Highsound Smart Phone Watch for Android (Gray)"
        },
        "highlight": {
          "name": [
            " <em>Smart</em>"
          ]
        }
      }
    ]
  }
“点击次数”:{
“总数”:1,
“最高分数”:0.6349302,
“点击次数”:[
{
“_索引”:“我的_索引”,
“_类型”:“我的_类型”,
“_id”:“5”,
“_分数”:0.6349302,
“_来源”:{
“名称”:“适用于Android的Highsound智能手机手表(灰色)”
},
“亮点”:{
“姓名”:[
“聪明”
]
}
}
]
}

解决方案有帮助吗?