Elasticserach - переопределить определения сопоставления во время запроса агрегации - PullRequest
0 голосов
/ 22 января 2020

У меня есть запрос агрегации -

POST /my-index/_search
{
  "query": {
    ...
      "filter": [
        {
          "terms": {
            "venueId.keyword": [
              "ID1",
              "ID2"
            ]
          }
        }
      ]
    }
  },
  "from": 0,
  "size": 0,
  "aggs": {
    "venue": {
      "terms": {
        "field": "venueId.keyword"
      },
      "aggs": {
        "multi_agg": {
          "terms": {
                "field": "networkName.keyword"
            }
        }
      }
    }
  }
}

На случай, если у меня есть 2 сети (для одного места) с именами XXX и xxx. В результате агрегации выводится 2 сети и только 1 имя - xxx, например -

 "aggregations": {
    "venue": {
      "doc_count_error_upper_bound": 0,
      "sum_other_doc_count": 0,
      "buckets": [
        {
          "key": "ID1",
          "doc_count": 5,
          "multi_agg": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
              {
                "key": "xxx",
                "doc_count": 2
              }...

Причиной вышеизложенного является отображение, определенное в нижнем регистре -

GET /my-index/_mapping/field/networkName.keyword
{
  "my-index": {
    "mappings": {
      "_doc": {
        "networkName.keyword": {
          "full_name": "networkName.keyword",
          "mapping": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256,
              "normalizer": "lowercase"
            }
          }
        }
      }
    }
  }
}

Из-за для обратной совместимости обновление настроек невозможно. Посоветуйте, пожалуйста, если это возможно и как переопределить отображение во время запроса агрегации, чтобы получить на выходе 2 разных ключа с числом 1 и именами XXX и xxx.

Ответы [ 2 ]

1 голос
/ 05 февраля 2020

МЫ нашли способ вернуть фактическое без изменений схемы или повторной индексации. Просто изменив agg часть запроса -

"aggs":{
      "venue":{
         "terms":{
            "field":"venueId.keyword"
         },
         "aggregations":{
            "top_client_hits":{
               "top_hits":{
                  "version":false,
                  "explain":false,
                  "_source":{
                     "includes":[
                        "networkId",
                        "networkName"
                     ],
                     "excludes":[
                     ]
                  }
               }
            }
         }
      }
   }
1 голос
/ 22 января 2020

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

Остальное просто, просто запустите этот код, как только ваш новый индекс будет создан с требуемым отображением

POST _reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index" 
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...