Изменение анализатора по умолчанию в ElasticSearch или LogStash

У меня есть данные, поступающие от Logstash, которые тщательно анализируются. По сути, поле "OS X 10.8" будет разбито на "OS", "X" и "10.8". Я знаю, что могу просто изменить сопоставление и переиндексировать существующие данные, но как мне изменить анализатор по умолчанию (либо в ElasticSearch, либо в LogStash), чтобы избежать этой проблемы в будущих данных?

Конкретное решение. Я создал сопоставление для этого типа перед первой отправкой данных в новый кластер.

Решение IRC: создайте шаблон индекса.


person Brian Hicks    schedule 04.11.2013    source источник


Ответы (2)


Как вы знаете, elasticsearch использует стандартный анализатор, когда анализатор не указан явно. Таким образом, при настройке шаблонов вы можете установить собственный анализатор, который называется стандартный. И там вы можете задать свои правила настройки анализатора, токензиера, фильтров токенов.

Вот несколько полезных ссылок, которые помогут вам лучше понять:

http://elasticsearch-users.115913.n3.nabble.com/How-we-can-change-Elasticsearch-default-analyzer-td4040411.html

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html

person aash    schedule 05.11.2013

Согласно этой странице, анализаторы могут запрос, для каждого поля или для каждого индекса.

На index time Elasticsearch будет искать анализатор в таком порядке:

  • Анализатор, определенный в файле field mapping.
  • Анализатор с именем default в настройках индекса.
  • Анализатор standard.

В query time есть еще несколько слоев:

  • Анализатор, определенный в файле full-text query.
  • search_analyzer, определенный в сопоставлении полей.
  • Анализатор, определенный в файле field mapping.
  • Анализатор с именем default_search в настройках индекса.
  • Анализатор с именем default в настройках индекса.
  • Анализатор standard.

С другой стороны, эта страница указать на важную вещь:

Анализатор регистрируется под логическим именем. Затем на него можно ссылаться из определений сопоставления или определенных API. Если ничего не определено, используются значения по умолчанию. Существует возможность определить, какие анализаторы будут использоваться по умолчанию, если ни один из них не может быть получен.

Таким образом, единственный способ определить пользовательский анализатор по умолчанию — переопределить один из предопределенные анализаторы, в данном случае анализатор default. это означает, что мы не можем использовать произвольное имя для нашего анализатора, он должен называться default

вот простой пример настройки индекса:

{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 0,
    "analysis": {
      "char_filter": {
        "charMappings": {
          "type": "mapping",
          "mappings": [
            "\\u200C => "
          ]
        }
      },
      "filter": {
        "persian_stop": {
          "type": "stop",
          "stopwords_path": "stopwords.txt"
        }
      },
      "analyzer": {
        "default": {<--------- analyzer name must be default
          "tokenizer": "standard",
          "char_filter": [
            "charMappings"
          ],
          "filter": [
            "lowercase",
            "arabic_normalization",
            "persian_normalization",
            "persian_stop"
          ]
        }
      }
    }
  }
}
person Saeed Zhiany    schedule 25.10.2016
comment
работает на 2.4.6, спасибо. Другой ответ не сработал. - person cahen; 26.09.2017
comment
@cahen Я рад, что это могло тебе помочь. - person Saeed Zhiany; 26.09.2017