I am trying use range query with elasticsearch
{
"query": {
"range": {
"order_no": {
"gte": "VM-0001",
"lte": "VM-0005"
}
}
}
}
But elastic return no result. I found system have problem with string include -
or _
This is mapping of that field:
"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
}
}
}
}
As per the documentation, in case of
string
fields, Elasticsearch uses aTermRangeQuery
which as far as I know doesn't analyze the term to search for. This means that your rangeVM-0001
-VM-0005
searches for exact these terms. Whereas you have in your index something likevm-0001
(lowercase). So, either use:or add another field in your index where you keep the
order_no
as keyword without any lowercasing or nGram-atization.