Elasticsearch "Вы имели в виду" функциональность - PullRequest
0 голосов
/ 05 февраля 2019

Я внедряю решение Elasticsearch для системы электронной коммерции, в котором я использую термин «предложить», чтобы попытаться создать функцию «Вы имели в виду ...»

Для орфографических ошибок, она работаетдействительно хорошо

Например, если я ищу hampster, то возвращается запрос с правильным написанием hamster, именно то, что я хочу

Проблема возникает, когда я что-то ищукак food, он возвращается с предложением fold, что я не хочу, чтобы он делал

Я пытаюсь понять, есть ли что-то встроенное в Elasticsearch, которое позволяет мне увидеть это food является допустимым термином, который не нуждается в предложении

Не уверен, что это полезно, но вот мой запрос и ответ (PHP)

Array
(
[suggest] => Array
    (
        [spell_check] => Array
            (
                [text] => food
                [term] => Array
                    (
                        [field] => name
                    )

            )

    )

)


Array
(
[took] => 1
[timed_out] => 
[_shards] => Array
    (
        [total] => 5
        [successful] => 5
        [skipped] => 0
        [failed] => 0
    )

[hits] => Array
    (
        [total] => 0
        [max_score] => 0
        [hits] => Array
            (
            )

    )

[suggest] => Array
    (
        [spell_check] => Array
            (
                [0] => Array
                    (
                        [text] => food
                        [offset] => 0
                        [length] => 4
                        [options] => Array
                            (
                                [0] => Array
                                    (
                                        [text] => fold
                                        [score] => 0.75
                                        [freq] => 1
                                    )

                                [1] => Array
                                    (
                                        [text] => feed
                                        [score] => 0.5
                                        [freq] => 4
                                    )

                                [2] => Array
                                    (
                                        [text] => four
                                        [score] => 0.5
                                        [freq] => 1
                                    )

                            )

                    )

            )

    )

)

1 Ответ

0 голосов
/ 05 февраля 2019

Это на самом деле предполагаемое поведение, поскольку оно обслуживает возможные орфографические ошибки.Существует оценка, связанная с возвращенным предлагаемым значением, и возвращается более одного элемента.В вашем случае запрос на питание, предполагая, что в вашей базе данных есть данные о продуктах питания, даст результаты.Я не уверен, что вы также возвращаете результаты в случае (или просто используете ES в качестве какого-либо сервиса подсказок) попадания, но ваша логика может, например, выдвигать подсказки только в том случае, если результаты не возвращены.Вы также можете видеть, что «feed» возвращается, но имеет более низкий балл, потому что, как я полагаю, есть также расстояние Левенштейна, применяемое для расчета итогового балла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...