Php 根据其他字段的相关性对MySQL搜索结果进行排名
我有一个查询,它将检查文档表中包含正在搜索的单词的所有列,并显示它应该链接到的匹配用户数据。然而,我的问题来自于试图根据相关性对搜索结果进行排名Php 根据其他字段的相关性对MySQL搜索结果进行排名,php,mysql,sql,Php,Mysql,Sql,我有一个查询,它将检查文档表中包含正在搜索的单词的所有列,并显示它应该链接到的匹配用户数据。然而,我的问题来自于试图根据相关性对搜索结果进行排名 select distinct a.* from application a, document d where ( d.`DocID` like "%president%" or d.`AppID` like "%preside
select distinct a.*
from application a,
document d
where ( d.`DocID` like "%president%"
or d.`AppID` like "%president%"
or d.`TypeID` like "%president%"
or d.`IDnum` like "%president%"
or d.`Activity` like "%president%"
or d.`Role/Position` like "%president%"
or d.`Date` like "%president%"
or d.`Venue` like "%president%"
or d.`BriefDescription` like "%president%"
or d.`NameoftheOrganization` like "%president%"
or d.`TermofOffice` like "%president%"
or d.`SpecialAward/Achievement` like "%president%"
or d.`Attachments` like "%president%"
or d.`Attachmentsb` like "%president%"
or d.`Attachmentsc` like "%president%"
or d.`Remarks` like "%president%" )
and d.`AppID` = a.`AppId`
当相关性不是一个问题时,上面的陈述起到了作用,但是,我想完成的是,如果找到“总统”一词,我还需要根据行中包含某些词(如国家、国际等)的其他字段对其相关性进行排序(这些关键字不会存储在数据库中,如果需要,可以将它们写入查询本身)
示例:角色/职位中有一行包含“总统”且简要描述中有“国际”的人的排名将高于角色/职位中有两行包含“总统”且简要描述中有“本地”的人。关键字排名不限于简要描述字段,因为其他字段也可能包含所述关键字
不同的例子:如果我搜索“获奖者”,那么在任何领域拥有“国际获奖者”的人的排名都会高于拥有“国家获奖者”的人
我已经在网上阅读了全文搜索,寻找适用于我的设置的解决方案,但我仍然不确定如何开始和解决我的问题,因为大多数示例都是针对最多不超过比较2或3个字段的查询。如果有人能引导我朝着正确的方向前进,这将非常重要elp.您的关联规则太复杂,无法用简单的全文索引来处理。全文可以为匹配提供关联性分数,但当您想让字段的分数不同时,则不能。您需要多个全文索引和多个全文搜索来实现这一点。另外,
类似“字符串”的字段是无意义的匹配。like
用于通配符搜索。你没有。这和说somefield='string'
没什么区别。哎呀。我把错误的查询放在上面了(我把它作为一个选项,在一个短语中搜索这个词,或者只搜索这个词。结果我粘贴了一个只搜索精确匹配的词。编辑…)我确实在查询中使用了通配符。这是一种可怕的攻击,使得读取查询变得非常难看,但是select(somefield,比如'%foo%')+(otherfield,比如'%foo%'))作为score1,等等。
起作用。类似匹配的真/假布尔结果可以相加为正常的0/1整数,这样你就可以生成分数。但是,当你添加越来越多的评分规则时,查询变得非常难看。我会试试这个。我只是想知道,你说我的关联规则太复杂了,无法理解用一个简单的全文索引处理。一个规则/can/一个简单的全文索引处理到什么程度?mysql可以给出相关性分数,但分数的实际值可能无法直接与类似但不同的全文搜索的其他分数进行比较。一个可能给你一个0->1范围,另一个可能返回1->20或其他任何值。