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