Зачастую при работе с Elasticsearch для полей необходимо указать не стандартный анализатор. Например, если нам нужен анализатор для конкретного языка или необходимо специфическая обработка текста (например, исключить определенные слова, задать список синонимов, или как я уже писал – приравнять Ё к Е...).
Задать полю не стандартный анализатор можно сделать при маппировании полей индекса:
А, что делать, если этот не стандартный анализатор нужно задать полям, которые маппируются динамически, а темплейт делать лень? Или для всех полей индекса?
Сначала я попытался переопределить анализатор, который используется по умолчанию – "standard". Но это не помогло. Оказывается, если при маппировании полей полю не указать анализатор, то анализатор "standard" используется не напрямую, а ищется анализатор под названием "default", который по умолчанию ссылается "standard". Поэтому нам нужно переопределить анализатор "default":
Задать полю не стандартный анализатор можно сделать при маппировании полей индекса:
В этом примере, поле "num" будет обрабатыватсья стандартным анализатором, а поле "name" будет обрабатыватсья нашим собственным анализатором "new_ analyzer".PUT http://localhost:9200/test/_mappings { "properties": { "id": { "type": "long" }, "num": { "type": "text" }, "name": { "type": "text", "analyzer": "new_ analyzer" } } }
А, что делать, если этот не стандартный анализатор нужно задать полям, которые маппируются динамически, а темплейт делать лень? Или для всех полей индекса?
Сначала я попытался переопределить анализатор, который используется по умолчанию – "standard". Но это не помогло. Оказывается, если при маппировании полей полю не указать анализатор, то анализатор "standard" используется не напрямую, а ищется анализатор под названием "default", который по умолчанию ссылается "standard". Поэтому нам нужно переопределить анализатор "default":
Теперь после создания индекса "test", все его поля, которым явно не задан анализатор, будут обрабатываться нашим анализатором.PUT http://localhost:9200/test { "settings": { "analysis": { "analyzer": { "default": { "tokenizer": "standard", "filter": [ "lowercase", "ru_RU", "stopwords_ru" ], "char_filter": [ "e_char_filter" ] } }, ...
Комментариев нет:
Отправить комментарий