ElasticSeach — получение как неполных, так и множественных слов

У меня есть каталог продуктов, который я индексирую в ElasticSearch с помощью клиента Elastica.

При реализации поиска я добавлял * после введенных условий поиска, чтобы при вводе whis или whisk он уже начал видеть результаты поиска для whisky.

Но я хочу показать результаты для poster и при вводе posters.

Я смог добиться результата от множественного числа к единственному, используя фильтр snowball. Но чтобы это сработало, мне нужно удалить *.

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

Любые идеи, как я могу это сделать? Код моего анализатора: (взято из здесь)

'analysis' => array(
    'analyzer' => array(
        'indexAnalyzer' => array(
            'type' => 'custom',
            'tokenizer' => 'whitespace',
            'filter' => array('lowercase', 'mySnowball')
        ),
        'searchAnalyzer' => array(
            'type' => 'custom',
            'tokenizer' => 'whitespace',
            'filter' => array('lowercase', 'mySnowball')
        )
    ),
    'filter' => array(
        'mySnowball' => array(
            'type' => 'snowball',
            'language' => 'English'
        )
    )
)

person Hitesh    schedule 13.05.2014    source источник
comment
Удар! Кто-нибудь что-нибудь знает?   -  person Hitesh    schedule 21.05.2014


Ответы (1)


Я пошел с пользовательской функциональностью.

Я ищу с точной поисковой фразой без *. Мой код ищет количество результатов. Если это неполное слово, оно, вероятно, вернет нулевой результат. Поэтому я добавляю * к результату запроса и выполняю еще один поиск.

Это делает мои автоматические предложения более медленными, но функциональными.

person Hitesh    schedule 04.06.2014