gpt4 book ai didi

elasticsearch - 使用 elasticsearch 对字符串进行范围查询

转载 作者:行者123 更新时间:2023-12-03 00:33:50 25 4
gpt4 key购买 nike

我正在尝试使用 elasticsearch 进行范围查询

{
"query": {
"range": {
"order_no": {
"gte": "VM-0001",
"lte": "VM-0005"
}
}
}
}

但是弹性返回没有结果。我发现系统有问题,字符串包括 -_

这是该字段的映射:

"order_no" : {
"type" : "string",
"index_analyzer" : "str_index_analyzer",
"search_analyzer" : "str_search_analyzer"
}

{
"analysis": {
"analyzer": {
"str_search_analyzer": {
"tokenizer": "keyword",
"filter": [
"lowercase"
]
},
"str_index_analyzer": {
"tokenizer": "keyword",
"filter": [
"lowercase",
"substring"
]
}
},
"filter": {
"substring": {
"type": "nGram",
"min_gram": 1,
"max_gram": 20
}
}
}
}

最佳答案

根据 the documentation ,对于 string 字段,Elasticsearch 使用 TermRangeQuery 据我所知不会分析要搜索的术语。这意味着您的范围 VM-0001 - VM-0005 会精确搜索这些术语。而您的索引中有类似 vm-0001(小写)的内容。所以,要么使用:

{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}

或者在您的索引中添加另一个字段,您将 order_no 作为关键字,不进行任何小写或 nGram 化。

关于elasticsearch - 使用 elasticsearch 对字符串进行范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27144102/

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