SQL-按“人”相关性进行排名或排序

时间:2018-12-18 18:09:40

标签: mysql sql asp-classic innodb

Looking实施了按功能进行排名/排序的功能,该功能通过我们人类视为相关的方式而非计算机视为相关的方式对产品进行排名。目前,我有此sql语句

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

就一个“关键字”在记录集中出现的次数而言,这些方法似乎工作得很好,但是如果您知道我的意思的话,它的意思是“是”或“不是”。

但是,搜索“计算机控制台”(在极少数情况下)时,我希望看到“ Playstation”,“ xBox”,“ Nintendo”,尽管我从未真正在搜索字段中键入这些关键字。

搜索“梯子”我个人希望看到的是能进入高度的梯子,而不是棋盘游戏中的“蛇形梯子”或带有梯子木纹的衣服。

一些带有“铁”的人,我不希望“铁床上用品”出现在首页中。

是否有实现这种目标的行业方法,或者没有人对如何实现这一目标有任何想法。即二级表,其中关键字/搜索字词与product_id匹配。

致谢

1 个答案:

答案 0 :(得分:0)

这可能与您的情况不完全相同,但可能会对您有所帮助。

我为我在工作中开发的大型内容管理系统设计了基于相关性的搜索结果系统。

内容包括标题,内容和隐藏的关键字字段(应用于搜索但不包含在标题或内容中的单词)。 [还有更多的领域,但是这三个将用于概念的演示]

添加内容后,它会被编入索引:删除了一些非字母数字字符,词干被词干(例如,教育,教育,教育者,教育家等都被索引为同一词),一些词被转换为另一个基于一些内部规则,然后它们都存储在索引中。

搜索完成后,系统会对每个关键字执行与上述相同的操作(根据内部规则删除不需要的字符,词干,转换)。

然后,系统会获得一个内容列表,该内容列表中的任何字段中的任何地方都有每个已解析的搜索关键字。

然后我的代码解析每个匹配的结果:首先,它查找在一个字段中连续存在的所有关键字;如果找不到搜索词组,则迭代地[组合词]查找较小的关键字组,直到找到为止(即,如果输入了4个搜索关键字,它将首先尝试所有4个,然后尝试3个,然后尝试2个,然后尝试1个他们不是一起找到的)

基于连续找到多少个关键字,系统将分数应用于搜索结果。根据是否在标题,内容或关键字字段中找到了关键字(进行了一些微调),以及在字段的开头附近找到它们的接近程度,给出了更高的分数。

然后根据此分数将结果提供给客户。

在我们的情况下,该系统运行良好,尤其是分组关键字部分取得了不错的效果。

您可以根据自己的情况使用类似的系统。搜索“梯子”会在“蛇和梯子游戏”之前订购“梯子-特大”之类的产品。

对于“计算机控制台”,您可以将此类字词添加到隐藏的关键字字段中。

请注意,解析列表的相关性会占用一些服务器资源,因此,这种类型的系统仅适用于您具有足够的可用基础结构或内容列表不大的情况。

相关问题