elasticsearch 完成建议器未按预期工作
} ` 上述映射存储在弹性搜索中
elasticsearch 完成建议器未按预期工作,
elasticsearch,autocomplete,
elasticsearch,Autocomplete,} ` 上述映射存储在弹性搜索中 后索引/测试 { “主机名”:“testing-01”, “建议”:[{“输入”:“测试-01”}] } 后索引/测试 { “主机名”:“testing-02”, “建议”:[{“输入”:“测试-02”}] } 后索引/测试 { “主机名”:“w1-TETTING-01”, “建议”:[{“输入”:“w1-TETTING-01”}] } 后索引/测试 { “主机名”:“w3-testing-01”, “建议”:[{“输入”:“w3-testing-0
后索引/测试
{
“主机名”:“testing-01”,
“建议”:[{“输入”:“测试-01”}]
}
后索引/测试
{
“主机名”:“testing-02”,
“建议”:[{“输入”:“测试-02”}]
}
后索引/测试
{
“主机名”:“w1-TETTING-01”,
“建议”:[{“输入”:“w1-TETTING-01”}]
}
后索引/测试
{
“主机名”:“w3-testing-01”,
“建议”:[{“输入”:“w3-testing-01”}]
}
`
当有30个文件的主机名以w1开头,主机名为w3时,当搜索术语“w3”时,我首先得到所有w1的建议,然后是w3。
建议查询
{
"settings": {
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 20
}
},
"analyzer": {
"autocomplete": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"autocomplete_filter"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"suggest": {
"type": "completion",
"analyzer": "autocomplete"
},
"hostname": {
"type": "text"
}
}
}
}
}
尝试了不同的分析器,同样的问题。
有人能引导吗?这是一个常见的陷阱。这是因为
min\u ngram
是1,因此w1-testing-01
和w3-testing-01
都将生成令牌w
。由于您只指定了analyzer
,autocomplete
分析器也将在搜索时启动,因此对w3
的搜索建议也将生成令牌w
,因此为什么w1-testing-01
和w3-testing-01
都匹配
解决方案是在建议
字段中添加搜索分析器
,以便在搜索时不使用自动完成
分析器(您可以使用标准
、关键字
或任何对您的用例有意义的分析器),但只能在索引时使用
{
"query": {
"_source": {
"include": [
"text"
]
},
"suggest": {
"server-suggest": {
"text": "w1",
"completion": {
"field": "suggest",
"size": 10
}
}
}
}
“映射”:{
“测试”:{
“财产”:{
“建议”:{
“类型”:“完成”,
“分析器”:“自动完成”,
“搜索引擎分析器”:“标准”如果有30个文档以w1和w3开头,结果仍然以w1开头。我们需要包括hiphens在内的建议。标准分析器将不包括hiphens。你有什么建议吗?公平地说,标准
分析器丢弃连字符,然后使用关键字
分析器。谢谢你,瓦尔。我将更新地图PINg并重新索引数据。现在工作正常。自动完成分析器的标记器已更改为空白。感谢您,很高兴它提供了帮助!
"mappings": {
"test": {
"properties": {
"suggest": {
"type": "completion",
"analyzer": "autocomplete",
"search_analyzer": "standard" <-- add this
},
"hostname": {
"type": "text"
}
}
}
}