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