# Объединение 3 анализаторов в 1

**URL:** <https://discuss.elastic.co/t/3-1/280764>\
**Category:** Вопросы на русском языке\
**Created:** [August 9, 2021, 6:36am UTC](https://discuss.elastic.co/t/3-1/280764 "2021-08-09T06:36:34Z")\
**Posts on this page:** 14\
**Page:** 1

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 9, 2021, 6:36am UTC](https://discuss.elastic.co/t/3-1/280764/1 "2021-08-09T06:36:34Z")

</div>

Добрый день, есть цель объединить 3 анализатора в 1 для будущих индексов, я с этим не сталкивался в процессе работы да и с эластиком в принципе то же редко, по идее у меня цель 3 анализатора.  
Может кто поможет с этим делом, я все ломаю или вообще не правильно склеиваю, все 3 анализатора ниже

```auto
Приравниваем е/ё

curl -X PUT http://localhost:9200/test_e
PUT test_e
{
  "settings": {
    "analysis": {
      "filter": {
        "ru_stop": {
          "type": "stop",
          "stopwords": "_russian_"
        },
        "ru_stemmer": {
          "type": "stemmer",
          "language": "russian"
        }
      },
      "char_filter": {
        "e_char_filter": {
          "type": "mapping",
          "mappings": ["Ё => Е", "ё => е"]
        }
      },
      "analyzer": {
        "e_ru": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ru_stop",
            "ru_stemmer"
          ],
          "char_filter": ["e_char_filter"]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "fairytale": {
        "type": "text",
        "analyzer": "e_ru"
        }
      }
    }
}

Точка разделитель

PUT my-dot
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_dot_analyzer": {
          "type": "pattern",
          "pattern": "\\.", 
          "lowercase": true
        }
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 9, 2021, 3:56pm UTC](https://discuss.elastic.co/t/3-1/280764/2 "2021-08-09T15:56:48Z")

</div>

> [@ForeverRED66](#):
>
> есть цель объединить 3 анализатора в 1

Это сделать нельзя, так как в анализаторе только один токенизатор, но можно выбрать общий токенизатор и обьединить токен-фильтры в один анализатор. Что вы хотите добиться-то?

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 9, 2021, 6:02pm UTC](https://discuss.elastic.co/t/3-1/280764/3 "2021-08-09T18:02:11Z")

</div>

итоговая цель, при поисковом запросе  
1)что бы е/ё были 1 символом  
2)точка была разделителем  
3)дублирующая информация в одном документе удалялась после 1го вхождения

Я думал это все анализаторами делается и их обьединением.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 9, 2021, 6:19pm UTC](https://discuss.elastic.co/t/3-1/280764/4 "2021-08-09T18:19:15Z")

</div>

> [@ForeverRED66](#):
>
> итоговая цель, при поисковом запросе  
> 1)что бы е/ё были 1 символом  
> 2)точка была разделителем  
> 3)дублирующая информация в одном документе удалялась после 1го вхождения

Это не цель. Вы описываете решение, которое вы пытаетесь воплотить. Мне сложно приставить какую проблему вы пытаетесь решить с помощью этого набора мер. Особенно меня смущает 3). Можно, как-нибудь, на примерах пояснить какие документы и запросы должны совпадать?

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 9, 2021, 6:50pm UTC](https://discuss.elastic.co/t/3-1/280764/5 "2021-08-09T18:50:40Z")

</div>

1)Думаю логично е и ё однин символ при поисковом запросе Еж или Ёж одно и то же  
2)"Город Москва, красивый.город Москва" при поисковом запросы вывод что бы получался первая часть Город Москва,красивый вторая часть город Москва  
3)"Город Москва, красивый.город Москва" вывод должен получаться Город, красивый.город Москва  
А все объединить что бы в итоговом варианте получалось + е/ё  
первый вывод "Город, красивый"  
второй вывод "город Москва"

Нафига оно надо не могу сказать, попросили сделать, по отдельности сделал, кроме последнего пункта, а как объединить хз.  
Просили это -

- Чувствительность поиска к Ё (считаем, Е и Ё одним символом): добавить к анализатору приравнивание Е к Ё и е к ё
- Отсутствие пробелов между типом и названием АО - Сделать точку разделителем в поисковом анализаторе
- повторяющиеся названия уровней (удаляем первое повторение): дополнительный сервис-прослойка на задваивающиеся элементы строки

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 9, 2021, 7:30pm UTC](https://discuss.elastic.co/t/3-1/280764/6 "2021-08-09T19:30:02Z")

</div>

> [@ForeverRED66](#):
>
> вывод должен получаться

Что такое вывод? Я думал мы про поиск говорим. При поиске мы находим все запись. Мы про подсветку тут говорим, если да, то для какой поисковой фразы?

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 10, 2021, 5:56am UTC](https://discuss.elastic.co/t/3-1/280764/7 "2021-08-10T05:56:47Z")

</div>

про поиск (это я так назвал вывод), что бы при поиске работали эти 3 анализаторы.

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 10, 2021, 9:45pm UTC](https://discuss.elastic.co/t/3-1/280764/8 "2021-08-10T21:45:12Z")

</div>

Я все-равно не понимаю, зачем вам это:

> [@ForeverRED66](#):
>
> повторяющиеся названия уровней (удаляем первое повторение): дополнительный сервис-прослойка на задваивающиеся элементы строки

Без этого все работает:

```auto
DELETE test

PUT test
{
  "settings": {
    "analysis": {
      "filter": {
        "ru_stop": {
          "type": "stop",
          "stopwords": "_russian_"
        },
        "ru_stemmer": {
          "type": "stemmer",
          "language": "russian"
        }
      },
      "char_filter": {
        "e_char_filter": {
          "type": "mapping",
          "mappings": [
            "Ё => Е",
            "ё => е",
            ". => ,"
          ]
        }
      },
      "analyzer": {
        "e_ru": {
          "tokenizer": "standard",
          "filter": [
            "lowercase",
            "ru_stop",
            "ru_stemmer"
          ],
          "char_filter": [
            "e_char_filter"
          ]
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "fairytale": {
        "type": "text",
        "analyzer": "e_ru"
      }
    }
  }
}

POST test/_bulk?refresh
{"index": {"_id":"1"}}
{"fairytale": "Город Москва, красивый.город Москва и Ёж"}

POST test/_search
{
  "query": {
    "match": {
      "fairytale": "еж"
    }
  }
}

POST test/_search
{
  "query": {
    "match": {
      "fairytale": "красивый"
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 11, 2021, 3:50pm UTC](https://discuss.elastic.co/t/3-1/280764/9 "2021-08-11T15:50:00Z")

</div>

Тут наверно мои знания синтаксиса эластика заканчиваются, а для чего стоит замена точки на запятую.  
в этом анализаторе работает только Е/ё ,а ведь цель еще добавить к анализу разделитель слов - точку и отсутствие дублей слов в выводе

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 11, 2021, 4:14pm UTC](https://discuss.elastic.co/t/3-1/280764/10 "2021-08-11T16:14:05Z")

</div>

> [@ForeverRED66](#):
>
> к анализу разделитель слов - точку

Мы заменяем ее на запятую, чтобы она работала в случае `foo.bar` Точка в этом случае не работает, как разделитель, поэтому мы заменяем ее на запятую.

> [@ForeverRED66](#):
>
> отсутствие дублей слов в выводе

Зачем?

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 12, 2021, 6:38am UTC](https://discuss.elastic.co/t/3-1/280764/11 "2021-08-12T06:38:23Z")

</div>

Как я уже писал , это попросили сделать меня, для чего это все хз.  
А мой вараинт с точкой не пройдет? И удаление дублей видимо о же нужно, я не находил такого решения сам.

```auto
PUT my-dot
{
  "settings": {
    "analysis": {
      "analyzer": {
        "my_dot_analyzer": {
          "type": "pattern",
          "pattern": "\\.", 
          "lowercase": true
        }
      }
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Igor\_Motov](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/igor_motov/32/45193_2.png) [@Igor\_Motov](https://discuss.elastic.co/u/Igor_Motov)\
**Post date:** [August 12, 2021, 5:30pm UTC](https://discuss.elastic.co/t/3-1/280764/12 "2021-08-12T17:30:25Z")

</div>

> [@ForeverRED66](#):
>
> Как я уже писал , это попросили сделать меня, для чего это все хз.

Жаль, что ничем вам тут помочь не смогу. Я в таком режиме не работаю. Когда я вижу бессмысленное требование я всегда пытаюсь понять что за этим требованием стоит, вместо того, чтобы бездумно это требование выполнять.

---

<div class="post-metadata">

**Author:** ![ForeverRED66](https://avatars.discourse-cdn.com/v4/letter/f/a88e4f/32.png) [@ForeverRED66](https://discuss.elastic.co/u/ForeverRED66)\
**Post date:** [August 13, 2021, 7:44am UTC](https://discuss.elastic.co/t/3-1/280764/13 "2021-08-13T07:44:55Z")

</div>

возможно я не правильно понимаю цель всего этого и вас ввожу в заблуждение своими догадками.  
Я попрошу более точное описание этого пункта.

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [September 10, 2021, 7:45am UTC](https://discuss.elastic.co/t/3-1/280764/14 "2021-09-10T07:45:01Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
