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

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进行类似运算符的结果集:
  • 荷马·辛普森
  • 巴特·辛普森
  • Marge Simpson
    我该如何查询?
  • 最佳答案

    完成建议在FST上起作用,并且其实现针对前缀进行了优化。

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

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

    引用:https://www.elastic.co/assets/bltced6bd71d5fa33ab/suggest_1.png?uid=bltced6bd71d5fa33ab

    10-01 16:58