gpt4 book ai didi

elasticsearch - 弹性中的多匹配查询不匹配初始字符

转载 作者:行者123 更新时间:2023-12-02 22:46:59 26 4
gpt4 key购买 nike

您好,我正在尝试设置一个搜索框,该框将对某些字段进行部分搜索,而对其他字段进行标准搜索。我快到了,但未能克服以下障碍:

这是我的索引:

PUT /my_index
{
"mappings": {
"blogpost": {
"properties": {
"firstname": {
"fields": {
"autocomplete": {
"index_analyzer": "autocomplete",
"type": "string"
},
"firstname": {
"index_analyzer": "standard",
"type": "string"
}
},
"type": "string"
}
}
}
},
"settings": {
"index": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "ngram_tokenizer",
"type": "custom"
},
"standard": {
"type": "standard"
}
},
"tokenizer": {
"ngram_tokenizer": {
"max_gram": "20",
"min_gram": "2",
"type": "nGram"
}
}
},
"creation_date": "1431690991641",
"number_of_replicas": "0",
"number_of_shards": "3",
"uuid": "W4Ug6IadS9mYuN5_Pqlhow",
"version": {
"created": "1040499"
}
}
}
}

索引1文件:
PUT /my_index/blogpost/1
{"firstname" : "Albert"}

简单查询:
/_search?q=Albert

返回艾伯特。都好。

多重匹配查询:
{
"query": {
"multi_match": {
"query": "Albert",
"fields": [
"firstname",
"firstname.autocomplete"
]
}
}
}

还返回阿尔伯特。都好。

如果我用bert代替Albert,它将返回Albert。都好。

但是“Al”或“al”或“Alber”或“alber”则不!包含首字母的任何搜索都会失败。

然而
/my_index/_search?firstname.autocomplete:Al

一切都很好。

请帮忙。

最佳答案

默认为field.autocomplete的搜索分析器通常为standard

因此,当您搜索Al时,您实际上是在寻找“al”甚至是“Al”,您最终都在搜索小写版本。

但是,在使用自动完成分析器建立索引时,您并未将数据规范化为小写,因此索引中仅包含术语“A1”。

您可以使用分析API来检查数据的分析方式

GET /my_index/_analyze?field=firstname.autocomplete&text=Albert"

lowercase token filter添加到“自动完成”分析器应该可以解决此问题:
   "autocomplete": {
"tokenizer": "ngram_tokenizer",
"type": "custom",
"filter" :[
"lowercase"
]
},

关于elasticsearch - 弹性中的多匹配查询不匹配初始字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30261519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com