#python #python-3.x #elasticsearch #dsl
#python #python-3.x #elasticsearch #dsl
Вопрос:
Приведенный ниже запрос — это то, что я хотел бы создать, используя elasticsearch-dsl-py, но я не знаю, как это сделать.
GET /myindex/_search/
{
"query": {
"range": {
"int_field": {
"gte": "2455",
"lte": "2455"
}
}
}
}
Я просто хочу выполнить запрос, подобный приведенному ниже, в формате SQL
select * from my_index where int_field >= 777 or int_field <= 779
Используя elasticsearch-dsl-py, это настолько близко, насколько я могу получить, но это не то же самое.
class MyIndex(Document):
int_field = Integer()
MyIndex.search().filter('range', int_field={"gte": 2454,"lte": 2456})
Приведенный выше код выдает ошибку ниже
{ «ошибка»: { «root_cause»: [ { «тип»: «исключение query_shard_exception», «причина»: «не удалось создать запрос: {n «диапазон»: {n «int_field»: {n «from»: 2454,n «to» : 2456,n
«include_lower»: false,n «include_upper » : true,n
«boost»: 1.0n }n }n}», «index_uuid»: «HRdIrs3LRnqO_5rbSjZi7A», «index»: «myindex» } ], «type»: «исключение search_fase_execution_exception», «reason»: «сбой всех сегментов», «phase»: «запрос», «grouped»: true, «failed_shards»: [ { «сегмент»: 0, «индекс»: «myindex», «узел»: «t-bkDruUSh61vUvKAlX2fw», «причина»: { «тип»: «исключение query_shard_exception», «причина»: «не удалось создать запрос: {n «диапазон»: {n «int_field»: {n «from»: 2454,n «to» : 2456,n
«include_lower»: false,n «include_upper»: true,n
«boost»: 1.0 n }n }n}», «index_uuid»: «HRdIrs3LRnqO_5rbSjZi7A», «index»: «myindex», «caused_by»: { «тип»: «исключение illegal_argument_exception», «причина»: «Не удается выполнить поиск по полю [int_field], поскольку оно не проиндексировано». } } } ] }, «статус»: 400 }
Комментарии:
1. Ваш запрос правильный, однако, похоже, что поле
int_field
не проиндексировано, следовательно, оно недоступно для поиска. Можете ли вы поделиться тем, что вы получили отGET myindex
?2. @Val он находится в индексе с несколькими документами. при проверке _mapping он выдает,
"char_end" : { "type" : "integer", "index" : false },
возможно ли это из-за index: false ?3. Вам нужно установить
"index": true
вместо"index": false
, и тогда ваш запрос будет работать