# Не получается побороть морфологию

**URL:** https://discuss.elastic.co/t/topic/182967
**Category:** Вопросы на русском языке
**Created:** [May 27, 2019, 9:14pm UTC](https://discuss.elastic.co/t/topic/182967 "2019-05-27T21:14:54Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![Vivaldy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vivaldy/32/26511_2.png) [@Vivaldy](https://discuss.elastic.co/u/Vivaldy)
#### Post date: [May 27, 2019, 9:14pm UTC](https://discuss.elastic.co/t/topic/182967/1 "2019-05-27T21:14:54Z")

</div>

Прошу прошения, если вопрос банален, я новичок в работе с ElasticSearch.

Установил версию 7.1 и добавил словари hunspell

Создал индекс с таким анализатором:

```
			['char_filter' => [
				'ru_mapping' => [
					'type' => 'mapping',
					'mappings' => ['Ё=>Е', 'ё=>е']
				]
			],
			'tokenizer' => [
				'ru_nGram' => [
					'type' => 'nGram',
					'min_gram' => 4,
					'max_gram' => 10
				]
			], 
			'filter' => [
				'ru_stopwords' => [
					'type' => 'stop',
					'stopwords' => 'а,без,более,бы,был,была,были,было,быть,в,вам,вас,весь,во,вот,все,всего,всех,вы,где,да,даже,для,до,его,ее,если,есть,еще,же,за,здесь,и,из,или,им,их,к,как,ко,когда,кто,ли,либо,мне,может,мы,на,надо,наш,не,него,нее,нет,ни,них,но,ну,о,об,однако,он,она,они,оно,от,очень,по,под,при,с,со,так,также,такой,там,те,тем,то,того,тоже,той,только,том,ты,у,уже,хотя,чего,чей,чем,что,чтобы,чье,чья,эта,эти,это'
				],
				'en_stopwords' => [
					'type' => 'stop',
					'stopwords' => 'a,an,and,are,as,at,be,but,by,for,if,in,into,is,it,no,not,of,on,or,such,that,the,their,then,there,these,they,this,to,was,will,with'
				],
				'my_nGram' => [
					'type' => 'nGram',
					'min_gram' => 2,
					'max_gram' => 8
				],
				'custom_word_delimiter' => [
					'type' => 'word_delimiter',
					'generate_word_parts' => true,
					'generate_number_parts' => true,
					'catenate_words' => true,
					'catenate_numbers' => false,
					'catenate_all' => true,
					'split_on_case_change' => true,
					'preserve_original' => true,
					'split_on_numerics' => false
				],
				'ru_RU' => [
					'type' => 'hunspell',
					'locale' => 'ru_RU',
					'dedup' => TRUE
				]
			],
			'analyzer' => [
				'ru_index' => [
					'type' => 'custom',
					'tokenizer' => 'standard',
					'char_filter' => ['html_strip', 'ru_mapping'],
					'filter' => ['lowercase', 'custom_word_delimiter', 'en_stopwords', 'ru_stopwords', 'ru_RU']
				]
			]];

```

сделал такую схему документа:

```
				['rec__name' => [
						'type' => 'text',
						'analyzer' => 'ru_index',
					],
				'rec__text' => [
						'type' => 'text',
						'analyzer' => 'ru_index',
					]
				];

```

вношу данные:

```
		'rec__name' => 'Привет ребята!',
		'rec__text' => 'Мы хотим в это воскресенье двинуть на пляж, наверное с ночевкой. Давайте с нами! Есть отважные?) ',

```

пробовал проверять так:

```
 POST forum.txt/_analyze
 {
   "text": "отважные",
   "analyzer": "ru_index"
 }

```

возвращает

```
{
  "tokens" : [
    {
      "token" : "отважный",
      "start_offset" : 0,
      "end_offset" : 8,
      "type" : "<ALPHANUM>",
      "position" : 0
    }
  ]
}

```

однако, запрос

```
GET _search
{
  "query": {
    "match": {
      "rec__text" : {
        "query" : "отважный"
      }
    }
  }
}

```

В результате запрос ничего не возвращает.

Помогите пожалуйста разобраться.

---

<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: [May 27, 2019, 10:41pm UTC](https://discuss.elastic.co/t/topic/182967/2 "2019-05-27T22:41:18Z")

</div>

А что analyze выдает если ему задать "Есть отважные?)" в качестве текста и вызвать его по имени поля а не по имени анализатора?

---

<div class="post-metadata">

### Author: ![Vivaldy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vivaldy/32/26511_2.png) [@Vivaldy](https://discuss.elastic.co/u/Vivaldy)
#### Post date: [May 28, 2019, 6:54am UTC](https://discuss.elastic.co/t/topic/182967/3 "2019-05-28T06:54:17Z")

</div>

Вот такой запрос:

```
POST forum.txt/_analyze
{
  "text": "Есть отважные?)",
  "field": "rec__text"
}

```

Дает такой результат:

```
{
  "tokens" : [
    {
      "token" : "есть",
      "start_offset" : 0,
      "end_offset" : 4,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "отважные",
      "start_offset" : 5,
      "end_offset" : 13,
      "type" : "<ALPHANUM>",
      "position" : 1
    }
  ]
}

```

На одно слово "отважные" все равно такой же результат - будто hunspell не используется

Запрос: `GET forum.txt/_mappings`

Возвращает:

```
{
  "forum.txt" : {
    "mappings" : {
      "properties" : {
        "rec__name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "rec__text" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

```

Я тут не вижу анализаторов ☹

---

<div class="post-metadata">

### Author: ![Vivaldy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vivaldy/32/26511_2.png) [@Vivaldy](https://discuss.elastic.co/u/Vivaldy)
#### Post date: [May 28, 2019, 9:14am UTC](https://discuss.elastic.co/t/topic/182967/4 "2019-05-28T09:14:53Z")

</div>

Ура, нашел ошибку. Я mapping документа загружал командой

```
PUT forum.txt/_mapping
{
      "properties" : {
        "rec__name" : {
          "type" : "text",
          "analyzer" : "ru"
        },
        "rec__text" : {
          "type" : "text",
          "analyzer" : "ru"
        }
      }
}

```

а надо было

```
PUT forum.txt/_mappings

```

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

---

<div class="post-metadata">

### Author: ![Vivaldy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vivaldy/32/26511_2.png) [@Vivaldy](https://discuss.elastic.co/u/Vivaldy)
#### Post date: [May 28, 2019, 9:16am UTC](https://discuss.elastic.co/t/topic/182967/5 "2019-05-28T09:16:31Z")

</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: [May 28, 2019, 9:34am UTC](https://discuss.elastic.co/t/topic/182967/6 "2019-05-28T09:34:04Z")

</div>

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

---

<div class="post-metadata">

### Author: ![Vivaldy](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/vivaldy/32/26511_2.png) [@Vivaldy](https://discuss.elastic.co/u/Vivaldy)
#### Post date: [May 28, 2019, 9:35am UTC](https://discuss.elastic.co/t/topic/182967/7 "2019-05-28T09:35:15Z")

</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: [June 25, 2019, 9:35am UTC](https://discuss.elastic.co/t/topic/182967/8 "2019-06-25T09:35:20Z")

</div>

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