Агрегация мощности Elasticsearch с текстовыми полями

Я пытаюсь запросить средний запрос, сгенерированный за сеанс, я вставляю session_id, помещая данные в свои индексы, я хочу подсчитать отдельные сеансы и вывести среднее значение, одновременно проверяя сопоставление данных, которые я узнал что это в текстовом поле:

"session_id": {
    "type": "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  },

Для получения данных я вызываю:

$this->elasticsearch->search([
    'index' => 'nits_media_bid_won',
    'body' => [
        'query' => $query,
        'aggs' => [
            'total_session' => [
                'cardinality' => [
                    'field' => 'session_id',
                    'precision_threshold' => 100,
                ]
            ]
        ]
    ]
]);

Но я получаю сообщение об ошибке:

{
   "error":{
      "root_cause":[
         {
            "type":"illegal_argument_exception",
            "reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [session_id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
         }
      ],
      "type":"search_phase_execution_exception",
      "reason":"all shards failed",
      "phase":"query",
      "grouped":true,
      "failed_shards":[
         {
            "shard":0,
            "index":"nits_media_bid_won",
            "node":"q438L5GRSqaHJz1_vRtZXg",
            "reason":{
               "type":"illegal_argument_exception",
               "reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [session_id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
            }
         }
      ],
      "caused_by":{
         "type":"illegal_argument_exception",
         "reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [session_id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead.",
         "caused_by":{
            "type":"illegal_argument_exception",
            "reason":"Fielddata is disabled on text fields by default. Set fielddata=true on [session_id] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory. Alternatively use a keyword field instead."
         }
      }
   },
   "status":400
}

Если я сделаю изменение по ключевому слову:

'total_session' => [
    'cardinality' => [
        'field' => 'session_id.fields.keyword',
        'precision_threshold' => 100,
    ]
]

Это дает мне значение 0

"aggregations": {
  "total_session": {
    "value": 0
  }
}

1 ответ

Решение

Хотя я не полностью проверил ваш запрос, похоже, что имя поля ключевого слова отключено. Поле ключевого словаsession_id было бы session_id.keywordсогласно предоставленной карте

Другие вопросы по тегам