Elasticsearch,术语建议器返回

eug*_*ene 2 autocomplete elasticsearch

我不能term suggester工作。

这是我的设置。

'name_not_analyzed': {
    'type': 'string',
    "index": "not_analyzed"
},

'suggest': {
    'type': 'completion',
    'analyzer': "simple",
    'search_analyzer': 'simple',
    'payloads': 'yes'
}
Run Code Online (Sandbox Code Playgroud)

这是我的要求。

** 术语建议器不起作用..

GET /reviewmeta_index/_suggest
{

    "my" : {
    "text" : "dd",
        "term" : {
        "field" : "name_not_analyzed"
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

** 完成建议工作..

GET /reviewmeta_index/_suggest
{
  "product_suggest":{
        "text":"dd",
        "completion": {
            "field" : "suggest"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

关于我应该如何设置术语建议器工作的文档很少。

Chi*_*h25 7

Completion Suggester 用于自动完成功能,因此查询如下

{
  "name_suggest":{
        "text":"d",
        "completion": {
            "field" : "suggest"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

会给你类似的东西

    "options": [
                {
                   "text": "donald",
                   "score": 8
                },
                {
                   "text": "david",
                   "score": 7
                }
]
Run Code Online (Sandbox Code Playgroud)

whileterm suggester用于拼写检查和查找相似的术语,因此您需要查询

{
  "my-suggestion": {
    "text": "davi",
    "term": {
      "field": "name_not_analyzed",
       "size" : 10
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

这会给你这样的东西

"options": [
            {
               "text": "dave",
               "score": 0.8333333,
               "freq": 11
            },
            {
               "text": "david",
               "score": 0.6666666,
               "freq": 6
            }
     ]
Run Code Online (Sandbox Code Playgroud)

当用户获得零结果时,我使用术语建议器来表示“您是不是要说”功能。用于调整术语建议器的更多选项

编辑 1:添加 min_word_length 选项

由于您text只有 2 个字符,并且因为默认值为max_edits2,默认值为min_word_length4,所以您没有得到任何结果。

您需要min_word_length在查询中添加选项

GET /reviewmeta_index/_suggest
{

    "my" : {
    "text" : "dd",
        "term" : {
        "field" : "name_not_analyzed",
        "min_word_length" : 2
         }
     }
}
Run Code Online (Sandbox Code Playgroud)

上面的查询会给你诸如“do”、“did”之类的建议但不会像你在现场那样给你“DO”、“Did”index : not_analyzed

注意:您不能增加到max_edits超过 2,这是默认值。

ES 用于计算编辑距离的算法