elasticsearch 前缀自动完成建议弹性搜索
我正在尝试使用ElasticSearch实现前缀自动完成功能,以下是我对建议字段的映射:elasticsearch 前缀自动完成建议弹性搜索,elasticsearch,autocomplete,elasticsearch,Autocomplete,我正在尝试使用ElasticSearch实现前缀自动完成功能,以下是我对建议字段的映射: PUT vdpinfo { "mappings": { "details" : { "properties" : { "suggest" : { "type" : "completion" }, "title": {
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"
}
}
}
}
但结果同时返回{“建议”:“leather”}
和{“建议”:“2 leather”}
,更重要的是,{“建议”:“2 leather”}
的排名高于leather
我的问题是为什么
2
会返回,为什么它不像查询中那样执行前缀
自动完成<代码>前缀:leather?这是因为用于分析数据的默认分析器是分析器,每当遇到非字母字符时,分析器会将文本分解为术语,因此2 leather
实际上被索引为leather
,因此显示该结果的原因(以及为什么它首先出现)
默认情况下,他们使用简单
分析器而不是标准
分析器的原因是不提供基于停止词的建议()
因此,如果您改用标准
分析器,您将不会得到任何关于2皮革
PUT vdpinfo
{
"mappings": {
"details" : {
"properties" : {
"suggest" : {
"type" : "completion",
"analyzer" : "standard"
},
"title": {
"type": "keyword"
}
}
}
}
}
这是因为用于分析数据的默认分析器是分析器,每当遇到非字母字符时,它会简单地将文本分解为术语,因此
2 leather
实际上被索引为leather
,这就是为什么会显示该结果(以及为什么首先显示该结果)
默认情况下,他们使用简单
分析器而不是标准
分析器的原因是不提供基于停止词的建议()
因此,如果您改用标准
分析器,您将不会得到任何关于2皮革
PUT vdpinfo
{
"mappings": {
"details" : {
"properties" : {
"suggest" : {
"type" : "completion",
"analyzer" : "standard"
},
"title": {
"type": "keyword"
}
}
}
}
}
工作很好。非常感谢你的解释。酷,很高兴它有帮助!工作很好。非常感谢你的解释。酷,很高兴它有帮助!