Почему range filter в Elasticsearch жрет ресурсов больше чем полнотекстовый поиск?

У меня есть Filtred Query.
В первом случае поиск происходит по тексту,

{ 'query': {'filtered': {'filter': {'bool': {'must': [{'term': {'status': 4}}]}},
                        'query': {'bool': {'should': [{'match': {'name': {'operator': 'and',
                                                                          'query': 'барменша'}}},
                                                      {'match': {'description': {'boost': 0.9,
                                                                                 'operator': 'and',
                                                                                 'query': 'барменша'}}},
                                                      {'match': {'author': {'boost': 0.8,
                                                                            'operator': 'and',
                                                                            'query': 'барменша'}}},
                                                      {'match': {'tags': {'boost': 0.7,
                                                                          'operator': 'and',
                                                                          'query': 'барменша'}}}]}}}}


Во втором случае используется range filter.
{
 'query': {'filtered': {'filter': {'bool': {'must': [{'term': {'status': 4}},
                                                     {'range': {'year_to': {'lte': '1946'}}}]}}}}


Полная неожиданность в том, что второй запрос нагружает процессор в 2 раза больше. Почему так? Как исправить?

Маппинг выгляддит так:

"properties": {
    "id": {
        "type": "integer"
    },
    "name": {
        "analyzer": "russian_morphology",
        "type": "string"
    },
    "description": {
        "analyzer": "russian_morphology",
        "type": "string"
    },
    "status": {
        "type": "integer"
    },
    "tags": {
        "analyzer": "russian_morphology",
        "type": "string"
    },
    "year_from": {
        "type": "integer"
    },
    "year_to": {
        "type": "integer"
    }
}
  • Вопрос задан
  • 388 просмотров
Пригласить эксперта
Ответы на вопрос 1
Kotofey
@Kotofey
Меня смущает то, как составлен ваш запрос. Попробуйте вот так:
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "status": "4"
          }
        },
        {
          "range": {
            "year_to": {
              "from": "1946"
            }
          }
        }
      ],
      "must_not": [ ],
      "should": [ ]
    }
  },
  "from": 0,
  "size": 10
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы