Elasticsearch,术语建议者返回

时间:2015-11-13 06:16:13

标签: elasticsearch autocomplete

我无法让term suggester工作。

以下是我的设置。

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

'suggest': {
    'type': 'completion',
    'analyzer': "simple",
    'search_analyzer': 'simple',
    'payloads': 'yes'
}

这是我的要求。

**术语建议者没有工作..

GET /reviewmeta_index/_suggest
{

    "my" : {
    "text" : "dd",
        "term" : {
        "field" : "name_not_analyzed"
         }
     }
}

**完成提示工作..

GET /reviewmeta_index/_suggest
{
  "product_suggest":{
        "text":"dd",
        "completion": {
            "field" : "suggest"
        }
    }
}

关于如何设置术语建议器工作的文档很少..

1 个答案:

答案 0 :(得分:4)

Completion Suggester用于自动填充功能,因此查询

{
  "name_suggest":{
        "text":"d",
        "completion": {
            "field" : "suggest"
        }
    }
}

会给你类似的东西

    "options": [
                {
                   "text": "donald",
                   "score": 8
                },
                {
                   "text": "david",
                   "score": 7
                }
]

虽然term suggester用于拼写检查并查找类似字词,但您需要查询

{
  "my-suggestion": {
    "text": "davi",
    "term": {
      "field": "name_not_analyzed",
       "size" : 10
    }
  }
}

会给你这样的东西

"options": [
            {
               "text": "dave",
               "score": 0.8333333,
               "freq": 11
            },
            {
               "text": "david",
               "score": 0.6666666,
               "freq": 6
            }
     ]

当用户获得零结果时,我使用术语建议器来表示“你是不是意味着”功能。更多options用于调整术语建议。

编辑1:添加了min_word_length选项

由于您的text只有2个字符,并且max_edits的默认值为2且默认值min_word_length为4,因此您无法获得任何结果。

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

GET /reviewmeta_index/_suggest
{

    "my" : {
    "text" : "dd",
        "term" : {
        "field" : "name_not_analyzed",
        "min_word_length" : 2
         }
     }
}

以上查询会为您提供“do”,“did”等建议,但不会给你“DO”,“Did”,因为你有{{1}在球场上。

注意:您无法将index : not_analyzed增加到超过2的默认值。

ES用于计算编辑距离的algorithm