hoa*_*u68 3 elasticsearch range-query
我正在尝试将范围查询与elasticsearch一起使用
{
"query": {
"range": {
"order_no": {
"gte": "VM-0001",
"lte": "VM-0005"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
但弹性返回没有结果。我发现系统有字符串包含-
或的问题_
这是该字段的映射:
"order_no" : {
"type" : "string",
"index_analyzer" : "str_index_analyzer",
"search_analyzer" : "str_search_analyzer"
}
Run Code Online (Sandbox Code Playgroud)
{
"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
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
根据文档,对于string
字段,Elasticsearch 使用TermRangeQuery
据我所知不会分析要搜索的术语。这意味着您的范围VM-0001
-VM-0005
搜索确切的这些术语。而你的索引中有类似vm-0001
(小写)的内容。因此,要么使用:
{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者在索引中添加另一个字段,在其中保留 asorder_no
关键字,而不进行任何小写或 nGram 化。
归档时间: |
|
查看次数: |
12295 次 |
最近记录: |