MySQL全文搜索布尔模式混淆

6

当我尝试在布尔模式下使用全文搜索来设置搜索时,我有点困惑。这是我使用的查询:

$query = "SELECT *,

       MATCH(title) AGAINST('$q' IN BOOLEAN MODE) AS score

       FROM results

       WHERE MATCH(title) AGAINST('$q' IN BOOLEAN MODE)

       ORDER BY score DESC";

当我搜索+离婚+再融资时,返回的结果如下:
1) Divorce: Paying Off Spouse = Rate/Term Refinance
2) Divorce - What to Look Out For Regarding Divorced Borrowers

我是否正确地认为第二个结果不应该出现,因为它没有这两个单词?如果不是,那么如何创建该功能?

2个回答

9
也许我错了,但是如果你搜索这个字符串+divorce+refinance,会得到一个奇怪的结果。如果你想要搜索两个词,你应该搜索+divorce +refinance(中间有一个空格)。
我测试过了,它只返回一行:
Divorce: Paying Off Spouse = Rate/Term Refinance

4
您的问题涉及创建优先布尔查询,对于这种类型的查询,需要深入了解布尔搜索并了解如何执行布尔搜索。简单来说,让我解释一下为什么结果的第二个数字会显示。
首先应该了解编程中的布尔意味着什么?它表示条件是真还是假,即0到1。
现在让我解释一下布尔搜索是如何执行的?您已经给出了两个单词。让我们以布尔模式逐行搜索。搜索引擎开始逐行搜索,现在无论在哪里找到第一个单词,它都会将记录设置为true,并将分数设置为1,以在找到第一个单词的行中为行准备单词数。
现在它移动到下一个单词并执行相同的过程,给出记录True,并制作列表,无论在哪里找到该单词,同时为行准备单词数量。
现在有两行结果可用,并且它们被合并,并且将优先权赋予具有最大单词数和行的单词,这里是主要问题所在。
例如:
第一组数据:总数2,第二组数据:总数1,最终结果:1.33,行号1;
第一组数据:总数0,第二组数据:总数2,最终结果:1.25,行号2;
第一组数据:总数0,第二组数据:总数1,最终结果:1.25,行号3。
当将真加上假时,将两个结果列表合并的结果为真,就像1+0=1一样,结果应该大于1。因此,在评分单词相关性时,总是发现搜索引擎显示它找到任何单词的结果。
评分相关查询有两种类型:一种是忽略等于1的分数,并仅对得分大于1的记录进行计算。第二种是创建这样的查询,它永远不会显示等于1的记录。在您的情况下,您还可以执行以下操作以获取两个单词的正确结果:
SELECT *, ( (1.3 * (MATCH(title) AGAINST ('+term +term2' IN BOOLEAN MODE))) + (0.6 * (MATCH(text) AGAINST ('+term +term2' IN BOOLEAN MODE))) ) AS score FROM results WHERE ( MATCH(title, text) AGAINST ('+term +term2' IN BOOLEAN MODE) ) HAVING relevance > 0 ORDER BY relevance DESC;

我知道使用HAVING会使查询变慢,但目前没有其他可行的解决方案。希望这能解决您的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接