#elasticsearch
#elasticsearch
Вопрос:
У меня есть Elasticsearch
индекс следующим образом
{
"Price": "50.99"
},
{
"Price": "30.99"
},
{
"Price": "40.99"
},
{
"Price": "10.99"
}
Я пытаюсь извлечь документы на основе диапазона price
. Я хочу вернуть документы с диапазоном цен 30-100
. Но он не возвращает никакого документа.
GET index_name/_search
{
"query": {
"bool": {
"must": [
{ "range": {"Price": {"gte": 40, "lte": 100}}}
]
}
}
}
Поскольку Price
это в строковом формате, я не могу получить документы. У меня нет возможности изменить index
. Есть ли способ запросить его без изменения индекса?
Комментарии:
1. Вам необходимо обновить сопоставление, тогда это будет наиболее эффективным решением в долгосрочной перспективе
Ответ №1:
Лучший способ: измените тип поля на float
Но в любом случае, если вы хотите сохранить тип поля string, вы можете использовать для этого безболезненный скрипт. т. е
GET index_name/_search
{
"query": {
"bool": {
"must": {
"script": {
"script": {
"inline": "Float.parseFloat(doc['Price.keyword'].value) >= 40 amp;amp; Float.parseFloat(doc['Price.keyword'].value) <= 100",
"lang": "painless"
}
}
}
}
}
}