我有一个索引,其中存储了一些名称。
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进行类似运算符的结果集:我该如何查询?
最佳答案
完成建议在FST上起作用,并且其实现针对前缀进行了优化。
而且由于字符串“Bart Simpson”不是以“Simpson”开头,因此不会匹配。
但是,您可以使用将反向存储 token 的分析器。即
“巴特·辛普森” => [Simpson,Bart]。然后,当您搜索Simpson时,它确实与前缀匹配。
引用:https://www.elastic.co/assets/bltced6bd71d5fa33ab/suggest_1.png?uid=bltced6bd71d5fa33ab