Elasticsearch - неправильный тип поля - PullRequest
1 голос
/ 26 марта 2020

Я использую ElasticSearch 6.8.

Я попытался добавить поле типа ключевого слова в свое отображение индекса. То, что я хочу, это отображение с my_field, которое выглядит так:

"my_field": {
  "type": "keyword"
}

Итак, чтобы сделать это, я добавил поле к своему отображению:

"properties": {
  ...
  "my_field": {
    "type": "keyword",
    "norms": false
  },
  ...
}

Но в настоящее время оно дает мне что-то вроде:

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

Мне нужен этот тип ключевого слова, потому что мне нужно агрегировать по нему, и с типом текста, он дал мне:

Fielddata отключен для текста поля по умолчанию. Установите fielddata = true в [my_field], чтобы загрузить полевые данные в память путем инвертирования инвертированного индекса. Обратите внимание, что это может использовать значительную память. Вместо этого используйте поле ключевого слова вместо этого.

Но я не могу установить для fielddata значение true.

Я пробовал много вещей, таких как создание нового индекса вместо обновления одного, но ни один из эти попытки сработали.

  • Кто-нибудь знает, как получить правильный тип поля? (решение, которое я предпочитаю)

  • Или как установить для полевых данных значение true в отображении?

С уважением, Жюль

1 Ответ

1 голос
/ 26 марта 2020

Я только что создал для field-data значение true в поле text с помощью команды curl ниже для версии Elasticsearch 6.X:

curl -X POST "localhost:9200/my_index/type?pretty" -H 'Content-Type: application/json' -d'
> {
>   "mappings" :{
>   "properties": {
>     "my_field": {
>       "type":     "text",
>       "fielddata": true
>     }
>   }
>   }
> }'

И он создал индекс с правильным отображением.

{
  "_index" : "my_index",
  "_type" : "type",
  "_id" : "3Jl0F3EBg44VI1hJVGnz",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

API сопоставления дает ниже JSON ответ.

{
  "my_index": {
    "mappings": {
      "type": {
        "properties": {
          "mappings": {
            "properties": {
              "properties": {
                "properties": {
                  "my_field": {
                    "properties": {
                      "fielddata": {
                        "type": "boolean"
                      },
                      "type": {
                        "type": "text",
                        "fields": {
                          "keyword": {
                            "type": "keyword",
                            "ignore_above": 256
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...