Как мне создать фильтр условий “между” для целочисленного поля с помощью elasticsearch-dsl-py?

#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 , и тогда ваш запрос будет работать