Elasticsearch: как добавить анализатор языка на поле? - PullRequest
0 голосов
/ 05 сентября 2018

У меня есть индекс с французскими словами. Я хочу применить анализатор к свойствам индекса. Допустим, у меня есть свойство title, и я хочу рассматривать его как «французское свойство». Я попробовал это (в кибане):

PUT thing/_mappings/thing
{
  "properties": {
    "title": {
      "type": "text",
      "analyzer": "french",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
  }
}

Но это приводит к:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "Mapper for [title] conflicts with existing mapping in other types:\n[mapper [title] has different [analyzer]]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "Mapper for [title] conflicts with existing mapping in other types:\n[mapper [title] has different [analyzer]]"
  },
  "status": 400
}

Я не понимаю, почему у меня есть эта ошибка. Если я отображаю отображение (GET thing/_mappings), оно не содержит никакого существующего анализатора (если я что-то не так понял):

 // ...
    "title": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    }
  }

Как я могу считать свое свойство title французским? (источник: https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html)

1 Ответ

0 голосов
/ 05 сентября 2018

Вы не можете изменять анализатор поля title, которое по умолчанию равно standard, если не указано при создании поля.

Вам необходимо удалить свой индекс, изменить отображение в соответствии со своими потребностями, а затем переиндексировать данные.

Другим решением было бы добавить другое подполе к полю title с соответствующим анализатором:

PUT thing/_mappings/thing
{
  "properties": {
    "title": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        },
        "french": {                 <--- add this
          "type": "text",
          "analyzer": "french"
        }
      }
    }
  }
}

После запуска вам не нужно перезагружать все данные объемом 1 ГБ, а просто позвонить

POST thing/_update_by_query

для выбора нового подполя.

Единственный недостаток этого второго подхода заключается в том, что в результате вы получите больше проанализированных данных, чем необходимо, если вам не нужно поле title с анализатором standard. До вас.

...