gpt4 book ai didi

elasticsearch - 如何使Elasticsearch忽略某些查询之间的空格?

转载 作者:行者123 更新时间:2023-12-02 23:03:15 24 4
gpt4 key购买 nike

我的elasticsearch文档的字段Name带有以下条目:

Samsung Galaxy S3
Samsung Galaxy Ace Duos 3
Samsung Galaxy Duos 3
Samsung Galaxy S2
Samsung Galaxy S (I9000)

在使用以下查询 (注意“s”和“3”之间的空格)来查询此字段时:
{
"query": {
"match": {
"Name": {
"query": "galaxy s 3",
"fuzziness": 2,
"prefix_length": 1
}
}
}
}

它返回 "Samsung Galaxy Duos 3"作为相关结果,而不是 "Samsung Galaxy S3"

我为这种任务注意到的模式是忽略任何数字和任何单个字母字符之间的空格,并进行查询。例如,然后 "I-phone 5s"也应返回 "I-phone 5 s"

有没有一种很好的方法可以做到这一点?

最佳答案

您需要更改分析器,以将字符串从文本更改为数字时进行拆分-使用正则表达式会有所帮助(这基于camelcase analyser):

curl -XPUT 'localhost:9200/myindex/' -d '
{
"settings":{
"analysis": {
"analyzer": {
"mynewanalyser":{
"type": "pattern",
"pattern":"([^\\p{L}\\d]+)|(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"
}
}
}
}
}'

用您的字符串测试新的分析器:
-XGET 'localhost:9200/myindex/_analyze?analyzer=mynewanalyser&pretty' -d 'Samsung Galaxy S3'
{
"tokens" : [ {
"token" : "samsung",
"start_offset" : 0,
"end_offset" : 7,
"type" : "word",
"position" : 1
}, {
"token" : "galaxy",
"start_offset" : 8,
"end_offset" : 14,
"type" : "word",
"position" : 2
}, {
"token" : "s",
"start_offset" : 15,
"end_offset" : 16,
"type" : "word",
"position" : 3
}, {
"token" : "3",
"start_offset" : 16,
"end_offset" : 17,
"type" : "word",
"position" : 4
} ]
}

关于elasticsearch - 如何使Elasticsearch忽略某些查询之间的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28106770/

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