sql-按“人类”相关性排序

y3bcpkx1  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(384)

我们可以实现一个按功能排序的功能,按照我们人类认为相关的方式对产品进行排序,而不是按照计算机认为相关的方式。目前我有一个sql语句

select MATCH(productName) AGAINST('xyz' IN NATURAL LANGUAGE MODE) AS relevant...
... ORDER BY relevant DESC

这些看起来很有效,关于一个“关键字”在记录集中出现的次数,但是如果你知道我的意思的话,这是非常正确的。
然而,搜索“电脑控制台”(在不太可能的情况下),我想看到“playstation”,“xbox”,“nintendo”虽然我从来没有真正键入这些关键字到搜索字段。
搜索“梯子”我个人希望看到梯子的高度访问不是棋盘游戏“蛇和梯子”或衣服与梯子拍。
有些人用“铁”我不指望“铁人床上用品”出现在第一页。
有没有一个行业的方式来实现这样的事情,或者有没有人有任何想法如何可以实现这一点。i、 e第二个表,其关键字/搜索词与产品id匹配。
当做

sd2nnvve

sd2nnvve1#

这可能与你的情况不完全相同,但它可能会帮助你。
我为我在工作中开发的一个大型内容管理系统设计了一个基于相关性的搜索结果系统。
内容包括标题、内容和隐藏关键字字段(应用于搜索但不包括在标题或内容中的单词)[有更多的领域,但这三个将做演示的概念]
当内容被添加时,它会被编入索引:一些非字母数字字符被删除,每个单词都有词干(例如,educate、education、educator、educates等都被编入同一个单词的索引),一些单词根据一些内部规则被转换成另一个单词,然后它们都被存储在索引中。
搜索完成后,系统对每个关键字执行与上述相同的操作(删除不需要的字符、词干、基于内部规则的转换)。
然后,系统将获得一个内容列表,其中在这些字段的任何位置都有每个已解析的搜索关键字。
然后,我的代码解析每个匹配的结果:首先,它查找其中一个字段中连续存在的所有关键字;如果找不到搜索短语,它会反复地[组合词]查找较小的关键字组,直到找到为止(即,如果输入了4个搜索关键字,它会首先尝试所有4个,然后3个,然后2个,如果没有一起找到,则1个)
根据连续找到的关键词数量,系统会对搜索结果进行评分。根据是否在标题、内容或关键字字段中找到关键字[这需要一些微调]以及它们与字段开头的距离,会给出更高的分数。
然后根据这个分数将结果提供给客户。
该系统在我们的情况下运行得非常好,特别是分组关键字部分取得了很好的效果。
你可以在你的情况下使用类似的系统。搜索“梯子”会在“蛇和梯子游戏”之前订购“梯子-超大”这样的产品。
对于“计算机控制台”,您可以在隐藏的关键字字段中添加这样的术语。
请注意,解析列表的相关性需要一些服务器资源,因此这种类型的系统只适用于具有足够的可用基础结构或内容列表不太大的情况。

相关问题