Выделите поведение в Elasticsearch версии 6.0.1

#elasticsearch #elasticsearch-highlight

Вопрос:

Я сталкиваюсь с этой проблемой в эластичном поиске, которую я не могу объяснить. Иногда появляется подсветка, но в других случаях этого не происходит. Ниже приведен способ воспроизвести его с помощью кибаны. Мой индекс и сопоставление —

 PUT test_index
{
  "mappings": {
    "doc": {
      "properties": {
        "type": {
          "type": "text"
        },
        "packages": {
          "type": "nested",
          "include_in_root": true,
          "properties": {
            "amount": {
              "type": "keyword",
              "fields": {
                "raw": { 
                  "type": "double" 
                }
              }
            },
            "rem_amount": {
              "type": "keyword",
              "fields": {
                "raw": { 
                  "type": "double" 
                }
              }
            }
          }
        }
      }
    }
  }
}
 

Вставьте примеры данных

 PUT test_index/doc/1
{
  "id": 1,
  "type": "data",
  "packages" : [
    {
      "amount": "100.0",
      "rem_amount": "100.5"
    }
  ]
}
 

Следующие запросы(Запрос 1 и Запрос 2) не возвращают выделение. Пожалуйста, обратите внимание, что у меня есть более широкий запрос. Я вставляю сюда только часть этого.

Запрос 1: require_field_match: true и поля: [«пакеты.*»]. Вывод — Без подсветки

 GET test_index/_search
{
  "query": {
    "query_string": {
      "query": "100",
      "fields": ["packages.*"],
      "type":"phrase_prefix"
    }
  },
  "min_score": 0.000001,
  "highlight" : {
    "require_field_match": true,
    "fields": {
      "*": {
        "type": "plain"
      }
    }
  }
}
 

Query 2: require_field_match: false and fields: [«packages.*»]. Output — No highlight

 GET test_index/_search
{
  "query": {
    "query_string": {
      "query": "100",
      "fields": ["packages.*"],
      "type":"phrase_prefix"
    }
  },
  "min_score": 0.000001,
  "highlight" : {
    "require_field_match": false,
    "fields": {
      "*": {
        "type": "plain"
      }
    }
  }
}
 

Only in the case where require_field_match: false and I REMOVE line «fields»: [«packages.*»] is when the highlights appear:
Query 3

 GET test_index/_search
{
  "query": {
    "query_string": {
      "query": "100",
      "type":"phrase_prefix"
    }
  },
  "min_score": 0.000001,
  "highlight" : {
    "require_field_match": false,
    "fields": {
      "*": {
        "type": "plain"
      }
    }
  }
}
 

highlighted block:

 "highlight": {
          "packages.rem_amount": [
            "<em>100.5</em>"
          ],
          "packages.amount": [
            "<em>100.0</em>"
          ]
        }
 

Кто-нибудь может, пожалуйста, объяснить такое поведение? Установка require_field_match как false также должна была вернуть выделение в запросе 2. Каким образом столбец «поля» и «require_field_match» влияют на это поведение?