# Поиск русских слов не работает

**URL:** https://discuss.elastic.co/t/topic/109816
**Category:** Вопросы на русском языке
**Created:** [November 30, 2017, 6:12pm UTC](https://discuss.elastic.co/t/topic/109816 "2017-11-30T18:12:12Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![Petr\_Sklyarov](https://avatars.discourse-cdn.com/v4/letter/p/87869e/32.png) [@Petr\_Sklyarov](https://discuss.elastic.co/u/Petr_Sklyarov)
#### Post date: [November 30, 2017, 6:12pm UTC](https://discuss.elastic.co/t/topic/109816/1 "2017-11-30T18:12:12Z")

</div>

Добрый день!  
Установил эластиксерч версия 5.6  
Плагин морфологический [GitHub - imotov/elasticsearch-analysis-morphology: Morphological Analysis Plugin for ElasticSearch (No longer maintained)](https://github.com/imotov/elasticsearch-analysis-morphology)  
Использую elasticsearch php библиотеку. Вот код

> $client = \Elasticsearch\ClientBuilder::create()-\>build();  
> $params = ;  
> $params['index'] = ES\_INDEX;
> 
> //Удаляю индекс  
> if($client-\>indices()-\>exists($params)){  
> $response = $client-\>indices()-\>delete($params);  
> }
> 
> //Создаю запись  
> if(! $client-\>indices()-\>exists($params)){
> 
> ```
> $params = [];
> $params = [
> 'index' => ES_INDEX,
> 'body' => [
> 'settings' => [
> 'analysis' => [
> 'analyzer' => [
> 'ru_analyzer' => [
> 'type' => 'custom',
> 'tokenizer' => 'standard',
> 'filter' => ['lowercase', 'russian_morphology', 'english_morphology', 'snowball', 'ru_stemming']
> ]
> ],
> 'filter' => [
> 'ru_stemming' => [
> 'type' => 'snowball',
> 'language' => 'Russian'
> ]
> ]
> ]
> ],
> 'mappings' => [
> ES_INDEX => [
> 'properties' => [
> 'title' => [
> 'type' => 'string',
> 'analyzer' => 'ru_analyzer',
> ]
> ]
> ]
> ]
> ]
> ];
> 
> $result = $client->indices()->create($params);
> 
> ```
> 
> }

Далее индексирую данные

> ```
> $params = [];
> $params['index'] = ES_INDEX;
> $params['type'] = ES_TYPE;
> $params['id'] = 1;
> $params['body']['title'] = 'Тестовая метка;
> $params['body']['location'] = [
> 'lat' => 50.1001,
> 'lon' => 25.1002
> ];
> $result = $client->index($params);
> 
> ```

Данные заносятся в эластик - если искать по ID - запись вернется, но если начать искать по тексту:

> $params = ;  
> $params['index'] = ES\_INDEX;  
> if ($client-\>indices()-\>exists($params)) {  
> $params['type'] = ES\_TYPE;  
> $params['size'] = 10000;  
> $params['body']['sort'] = ['\_score' =\> 'desc'];  
> $params['body']['query']['match']['title'] = 'тест';  
> $result = $client-\>search($params);  
> }

то ничего не находит

> Array  
> (  
> [took] =\> 0  
> [timed\_out] =\>  
> [\_shards] =\> Array  
> (  
> [total] =\> 5  
> [successful] =\> 5  
> [skipped] =\> 0  
> [failed] =\> 0  
> )
> 
> ```
> [hits] => Array
> (
> [total] => 0
> [max_score] => 
> [hits] => Array
> (
> )
> )
> 
> ```
> 
> )

Пожалуйста, подскажите, что я делаю не так

---

<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: [November 30, 2017, 7:15pm UTC](https://discuss.elastic.co/t/topic/109816/2 "2017-11-30T19:15:03Z")

</div>

Мне очень интересно, где вы вот это нашли:

```auto
'lowercase', 'russian_morphology', 'english_morphology', 'snowball', 'ru_stemming'

```

Это неправильный подход, который я уже несколько раз видел, и очень хотел бы задавить в первоисточнике.

---

<div class="post-metadata">

### Author: ![Petr\_Sklyarov](https://avatars.discourse-cdn.com/v4/letter/p/87869e/32.png) [@Petr\_Sklyarov](https://discuss.elastic.co/u/Petr_Sklyarov)
#### Post date: [November 30, 2017, 7:45pm UTC](https://discuss.elastic.co/t/topic/109816/3 "2017-11-30T19:45:04Z")

</div>

Это я в нескольких разных местах видел.... Но я понял что у меня было. На самом деле все работало, но я писал все в одном скрипте. Данные после индексации не успевали походу в еластике зписаться. Решилась проблемма написанием sleep(10) перед поиском 🙂  
Спасибо!

---

<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: [November 30, 2017, 8:00pm UTC](https://discuss.elastic.co/t/topic/109816/4 "2017-11-30T20:00:03Z")

</div>

> [@Petr\_Sklyarov](#):
>
> Решилась проблемма написанием sleep(10) перед поиском

> **[?refresh | Elasticsearch Reference \[6.0\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/6.0/docs-refresh.html)**

---

<div class="post-metadata">

### Author: ![bio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bio/32/76409_2.png) [@bio](https://discuss.elastic.co/u/bio)
#### Post date: [December 14, 2017, 6:16pm UTC](https://discuss.elastic.co/t/topic/109816/5 "2017-12-14T18:16:35Z")

</div>

Подскажите, а что тут не так ?  
Сам использую

```auto
['min_length_2', 'stop', 'lowercase', 'russian_morphology', 'english_morphology']

```

где

```auto
'min_length_2' => [
 'type' => 'length',
 'min' => 2
],
'stop' => [
 'type' => 'stop',
 'stopwords' => '_russian_'
]

```

---

<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: [December 15, 2017, 2:41am UTC](https://discuss.elastic.co/t/topic/109816/6 "2017-12-15T02:41:12Z")

</div>

> [@bio](#):
>
> Подскажите, а что тут не так ?

"Не так" для чего?

---

<div class="post-metadata">

### Author: ![bio](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/bio/32/76409_2.png) [@bio](https://discuss.elastic.co/u/bio)
#### Post date: [December 15, 2017, 5:55am UTC](https://discuss.elastic.co/t/topic/109816/7 "2017-12-15T05:55:37Z")

</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: [December 15, 2017, 4:22pm UTC](https://discuss.elastic.co/t/topic/109816/8 "2017-12-15T16:22:09Z")

</div>

Я написал, что неправильно применять несколько стеммеров для одного и того же языка. Например, в `['lowercase', 'russian_morphology', 'english_morphology', 'snowball', 'ru_stemming']` два русских стеммера ( `'russian_morphology'` и `'ru_stemming'` ) и два английских (`'english_morphology'`, `'snowball'`). Применять второй стеммер к базовым формам полученным из первого стеммера бесполезно. В вашем случае, только два стеммера - один для русского и другой для английского.

---

<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: [January 12, 2018, 4:22pm UTC](https://discuss.elastic.co/t/topic/109816/9 "2018-01-12T16:22:16Z")

</div>

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