Elasticsearch建议使用前缀为

时间:2018-02-27 13:11:02

标签: elasticsearch autosuggest elasticsearch-query elasticsearch-mapping

我有一个存储了一些名称的索引。

PUT localhost:9200/myIndex
{
  "mappings": {
    "record" : {
      "properties" : {
        "namesuggest" : {
          "type" :     "completion"
        }
      } 
    }
  }
}

所以我输入了一些记录:

PUT localhost:9200/myindex/record/1
{
  "namesuggest" : "Homer Simpson"
}

PUT localhost:9200/myindex/record/2
{
   "namesuggest" : "Bart Simpson"
}

    PUT localhost:9200/myindex/record/3
{
  "namesuggest" : "Marge Simpson"
}

通过此查询,我得到了建议:

POST localhost:9200/myindex/_search
{
    "suggest": {
        "name-suggest" : {
            "prefix" : "bart",
            "completion" : {
                  "field" : "namesuggest"
            }
        }
    }
}

如果我设置prefix == bart我已经回复了建议“Bart Simpson”并且这是正确的。

我不明白为什么,如果我设置prefix == Simpson我已经返回空白结果。

我的结果集与%Simpson%匹配,类似于运算符:

  • Homer Simpson
  • Bart Simpson
  • Marge Simpson

    我该如何进行查询?

1 个答案:

答案 0 :(得分:1)

完成建议适用于FST,并且它的实现针对前缀进行了优化。

而且因为弦乐" Bart Simpson"并不是以" Simpson"它不会匹配。

但是,您可以使用分析器来反向存储令牌。即 " Bart Simpson" => [辛普森,巴特]。然后,当您搜索Simpson时,它确实匹配前缀。

参考文献:https://www.elastic.co/assets/bltced6bd71d5fa33ab/suggest_1.png?uid=bltced6bd71d5fa33ab