Добрый день.
Пытаюсь настроить 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