我已经实现了在我使用期限建议,试图建立一个电子商务系统的解决方案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
)
)
)
)
)
)
这实际上是预期的行为,因为它迎合了可能的拼写错误。有一个与返回的建议值相关联,多个项目被返回的分数。在你的情况下,查询食物,假设你有你的数据库食品相关的数据,会返回结果。我不知道,如果你还的情况下返回结果(或只是使用ES作为某种建议的服务)一炮而红,但你的逻辑可能,例如,只需在没有结果的情况下,建议返回。你也可以看到,“进”则返回,但有一个较低的分数因为,我认为,还应用了Levenshtein距离来计算最终得分。