您的问题涉及创建优先布尔查询,对于这种类型的查询,需要深入了解布尔搜索并了解如何执行布尔搜索。简单来说,让我解释一下为什么结果的第二个数字会显示。
首先应该了解编程中的布尔意味着什么?它表示条件是真还是假,即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会使查询变慢,但目前没有其他可行的解决方案。希望这能解决您的问题。