我正在尝试使用ElasticSearch实现前缀自动完成功能,这是我对“建议”字段的映射:
PUT vdpinfo
{
"mappings": {
"details" : {
"properties" : {
"suggest" : {
"type" : "completion"
},
"title": {
"type": "keyword"
}
}
}
}
}
而且我用单字和双字(bigram)索引了一些数据,例如:
{"suggest": "leather"}
并且:
{"suggest": "leather seats"}
{"suggest": "2 leather"}
我的搜索查询是这样的:
GET /vdpinfo/details/_search
{
"suggest": {
"feature-suggest": {
"prefix": "leather",
"completion": {
"field": "suggest"
}
}
}
}
但是结果返回
{"suggest": "leather"}
和{"suggest": "2 leather"}
,更重要的是,{"suggest": "2 leather"}
的排名高于leather
。我的问题是为什么返回
2 leather
,为什么不像查询中那样仅执行prefix
自动完成功能。 prefix: leather
? 最佳答案
这是因为用于分析数据的默认分析器是 simple
分析器,它会在遇到非字母的字符时将文本简单地分解为术语,因此2 leather
实际上被索引为leather
,因此为什么显示此结果(以及为什么它首先显示)。
他们默认情况下使用simple
分析器而不是standard
的原因是不基于停用词(explanation here)提供建议。
因此,如果您改用standard
分析器,则对2 leather
不会有任何建议
PUT vdpinfo
{
"mappings": {
"details" : {
"properties" : {
"suggest" : {
"type" : "completion",
"analyzer" : "standard"
},
"title": {
"type": "keyword"
}
}
}
}
}
关于elasticsearch - 前缀自动完成建议elasticsearch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43419880/