【发布时间】:2018-02-27 13:11:01
【问题描述】:
我有一个索引,其中存储了一些名称。
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 运算符的结果集:
-
荷马辛普森
-
巴特辛普森
-
玛吉·辛普森
如何查询?
【问题讨论】:
-
因为辛普森是一个后缀。如果您需要快速的索引后缀搜索,推荐的技巧是在您的映射中添加一个多字段,其中包括一个反向令牌过滤器elastic.co/guide/en/elasticsearch/reference/current/…。然后,您可以在该反向字段上运行前缀查询,并以优化的方式获得后缀搜索。
-
你能给我举个例子吗?
标签: elasticsearch autosuggest elasticsearch-query elasticsearch-mapping