1

我有一个索引,其中存储了一些名称。

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%与类似 SQL 的运算符匹配的结果集:

  • 荷马辛普森

  • 巴特辛普森

  • 玛吉辛普森

    我该如何进行查询?

4

1 回答 1

1

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

而且由于字符串“Bart Simpson”不是以“Simpson”开头的,所以它不会匹配。

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

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

于 2018-02-27T13:25:25.487 回答