elasticsearch - not - query dsl kibana
Consulta de rango con elasticsearch para string (2)
Estoy intentando utilizar la consulta de rango con elasticsearch
{
"query": {
"range": {
"order_no": {
"gte": "VM-0001",
"lte": "VM-0005"
}
}
}
}
Pero el retorno elástico no tiene resultado. Encontré que el sistema tiene un problema con la cadena include -
o _
Este es un mapeo de ese campo:
"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
}
}
}
}
Según la documentación , en el caso de string
campos de string
, Elasticsearch utiliza un TermRangeQuery
que, por lo que yo sé, no analiza el término para buscar. Esto significa que su rango VM-0001
- VM-0005
busca exactamente estos términos. Mientras que tiene en su índice algo así como vm-0001
(minúscula). Entonces, cualquiera de los siguientes:
{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}
o agregue otro campo en su índice donde conserve el order_no
como palabra clave sin ninguna minúscula o nGram-atization.
{
"query": {
"range": {
"order_no": {
"gte": "vm-0001",
"lte": "vm-0005"
}
}
}
}