Как настроить elasticsearch для русской морфологии?

Добрый день.
Пытаюсь настроить elasticsearch для русской морфологии, но пока безуспешно.
Использую elastica для php и плагин elasticsearch-analysis-morphology (если это имеет значение, делаю на localhost на винде).
Поиск работает, но далеко не всегда находит слова с измененными окончаниями.
Может ли он обрабатывать слова с wildcards+морфология? Например, когда вводим фразу "*экономить*" и получаем "сэкономили".
Также при индексировании использую html_strip, но при поиске он все-равно выдает с тегами.

Мой индекс:
public $indexSettings = array(
        'analysis' => array(
            'analyzer' => array(
                self::INDEX_ANALYZER => array(
                    'type' => 'custom',
                    'tokenizer' => 'standard',
                    'filter' => array('lowercase', 'russian_morphology', 'english_morphology'),
                    'char_filter' => array('html_strip')
                ),
                self::SEARCH_ANALYZER => array(
                    'type' => 'custom',
                    'tokenizer' => 'standard',
                    'filter' => array('lowercase', 'russian_morphology', 'english_morphology')
                ),
                self::SEARCH_STRICT_ANALYZER => array(
                    'type' => 'custom',
                    'tokenizer' => 'standard',
                    'filter' => array('lowercase')
                )
            )
        )
    );
    public $mappingSettings = array(      
        'title'=>array(
            'type'=>'string',
            'include_in_all'=>true,
            'analyzer'=>self::INDEX_ANALYZER,
            'boost'=>100
        ),
        'content'=>array(
            'type'=>'string',
            'include_in_all'=>true,
            'analyzer'=>self::INDEX_ANALYZER,
            'boost'=>1
        ),
        'url'=>array(
            'type'=>'string',
            "index"=>"not_analyzed",
            'include_in_all'=>false,
        ),
    );


Мой поисковый запрос:
Elastica\Query Object
(
    [_params:protected] => Array
        (
            [query] => Array
                (
                    [query_string] => Array
                        (
                            [query] => ваш
                            [analyzer] => searchAnalyzer
                            [fields] => Array
                                (
                                    [0] => title^100
                                    [1] => content^1
                                )
                        )
                )
            [highlight] => Array
                (
                    [fields] => Array
                        (
                            [content] => Array
                                (
                                    [fragment_size] => 100
                                    [number_of_fragments] => 5
                                )
                        )
                    [pre_tags] => Array
                        (
                            [0] => *
                        )
                    [post_tags] => Array
                        (
                            [0] => *
                        )
                )
        )
    [_suggest:protected] => 0
    [_rawParams:protected] => Array
        (
        )
)


Если это поможет, мои классы:
pastebin.com/wXzjSZ6q
pastebin.com/YGxXSkj0
pastebin.com/ptiTVt0Q
  • Вопрос задан
  • 10460 просмотров
Пригласить эксперта
Ответы на вопрос 1
pavel_salauyou
@pavel_salauyou
Symfony2 & Angular разработчик
добавьте фильтр snowball, а для разделения слов от тегов попробуйте фильтр worddelimiter
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
SpectrumData Екатеринбург
от 300 000 до 400 000 ₽
LIME Москва
от 280 000 до 350 000 ₽
25 нояб. 2024, в 21:54
20000 руб./за проект
25 нояб. 2024, в 21:39
3000 руб./за проект
25 нояб. 2024, в 21:34
7000 руб./за проект