Elasticsearch“您是不是要”功能

时间:2019-02-05 14:59:06

标签: php elasticsearch

我一直在为电子商务系统实现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 :(得分:0)

这实际上是预期的行为,因为它可以解决可能的拼写错误。有一个与返回的建议值相关的分数,并且返回了多个项目。在您的情况下,假设您的数据库中有与食物相关的数据,那么对食物的查询将返回结果。我不确定是否在命中的情况下(或者只是将ES用作某种建议服务)也返回了结果,但是例如,您的逻辑只能在没有结果返回的情况下提出建议。您还可以看到返回了“ feed”,但得分较低,因为我认为还应用了levenshtein距离来计算最终得分。