我正在尝试使用范围查询与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
}
}
}
}
答案 0 :(得分:2)
根据the documentation,如果是string
字段,Elasticsearch会使用TermRangeQuery
,据我所知,它不会分析要搜索的字词。这意味着您的范围VM-0001
- VM-0005
会搜索确切的这些字词。而你的索引中有vm-0001
(小写)。所以,要么使用:
{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}
或在索引中添加另一个字段,您可以将order_no
作为关键字,而不需要任何小写或nGram-atization。
答案 1 :(得分:2)
{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}