提问人:Renato Cassino 提问时间:11/23/2022 更新时间:11/23/2022 访问量:26
在 Elasticsearch 中搜索匹配全文查找未完成的单词,但未找到完整的单词
Search match fulltext find with uncomplete word but not found with complete word in Elasticsearch
问:
我在elasticsearch查询中遇到了一个非常奇怪的问题。我在我的网站上进行了自动完成搜索,但遇到了问题。
例如,在我的国家有一个叫做“Recreio dos Bandeirantes”的社区 当我搜索“bandeirant”(当用户输入时)查询找到邻域,但是,当完成时,类型“bandeirantes”找不到相同的邻域。
这是我的查询
{
query: {
bool: {
must: [
{
match: {
'city.name': city,
},
},
{
match: {
'city.state': state,
},
},
{
match: {
keyword: {
query, // The query is 'bandeirant' or 'bandeirantes'
},
},
},
],
},
},
highlight: {
fields: {
keyword: {
number_of_fragments: 9,
},
},
},
size: 20,
}
最终邻域值为“Recreio dos Bandeirantes, Rio de Janeiro, RJ”
此字段的映射如下:
{
"search-neighborhood-01": {
"mappings": {
"properties": {
"city": {
//.....
},
"keyword": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "standard"
},
"name": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "standard"
}
}
}
}
}
我在分析器中的设置
{
"search-neighborhood-01": {
"settings": {
"index": {
// .......
"analysis": {
"filter": {
"autocomplete_filter": {
"token_chars": [
"letter"
],
"min_gram": "1",
"type": "edge_ngram",
"max_gram": "10"
}
},
"analyzer": {
"autocomplete": {
"filter": [
"lowercase",
"autocomplete_filter",
"asciifolding"
],
"type": "custom",
"tokenizer": "standard"
}
}
},
// .....
}
}
}
}
我的回应是bandeirant
// .....
{
//.....
"_source": {
"city": {
"name": "Rio de Janeiro",
"state": "RJ",
"keyword": "Rio de Janeiro, RJ"
},
"name": "Recreio dos Bandeirantes",
"keyword": "Recreio dos Bandeirantes, Rio de Janeiro, RJ"
},
"highlight": {
"keyword": [
"Recreio dos <em>Bandeirantes</em>, Rio de Janeiro, RJ"
]
}
}
我的回复是空的:/bandeirantes
我该怎么做才能解决这个问题?
谢谢 o/
答:
2赞
Kaveh
11/23/2022
#1
您之所以遇到此问题,是因为您的 Ngram 筛选器令牌具有配置,这意味着不会索引超过 10 的单词。"max_gram": "10"
我的建议是与配置一起增加此数量。“min_gram”
评论
1赞
Renato Cassino
11/23/2022
谢谢这个人:)我改成了 20 岁,就像一个魅力:)
0赞
Renato Cassino
11/23/2022
#2
我把max_ngram改成了20,:)
评论