搜索匹配全文查找不完整的词,但没有找到完整的词在Elasticsearch



我在elasticsearch查询中有一个非常奇怪的问题。我在我的网站上做了一个自动完成搜索,我有一个问题。

例如,在我的国家有一个社区叫做"Recreio dos banddeirantes";当我搜索"banddeirant"时;(当用户输入时)查询找到邻居,但是,当输入"banddeirantes"找不到相同的邻居。

这是我的查询

{
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,
}

最终邻里值为"rereio 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/

你有这个问题,因为你的Ngram过滤器令牌有"max_gram": "10"配置,这意味着超过10的单词将不会被索引。

我的建议是随着“min_gram”配置增加这个数量。

我将max_ngram更改为20并工作:)

相关内容

  • 没有找到相关文章

最新更新