MySQL 全文搜索布尔模式混淆


MySQL fulltext search Boolean mode confusion

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

$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";

当我运行搜索+divorce+refinance时,返回的结果是:

1) Divorce: Paying Off Spouse = Rate/Term Refinance
2) Divorce - What to Look Out For Regarding Divorced Borrowers

我的想法是否正确,第二个结果不应该出现,因为它没有两个词?如果没有,如何创建该功能?

也许我弄错了,但是如果您+divorce+refinance搜索此字符串,则会得到一个奇怪的结果。如果要搜索这两个单词,则应搜索+divorce +refinance(中间有空格)。

我测试了它,它只返回一行:

Divorce: Paying Off Spouse = Rate/Term Refinance

您的问题与创建优先布尔查询有关,对于这种类型的查询,必须深入研究布尔搜索,现在如何执行布尔搜索。简而言之,让我解释一下为什么显示结果的第二个数字结果。

一次应该首先了解布尔值在编程中的含义吗?这意味着任一条件为真或假,即 0 到 1。

现在让我解释一下执行布尔搜索?你已经给出了两个字。让我们在布尔模式下逐行搜索。搜索引擎启动并逐行搜索现在找到第一个单词的位置,它使记录为真,并为找到第一个单词的行提供 1 分,并准备在该行中找到的单词数。

现在它移动下一个单词并执行相同的过程,给出记录 True,并在找到单词的任何地方创建记录列表,并准备在该行中找到的单词数。

现在有两行结果可用,并且它们被俱乐部化,并且优先考虑具有最大单词数的单词,而这里的行是主要问题所在。

前>>>个总数。>> 第二>>总编号>>> 最后>>行
单词>>>结果>>单词>>>>>>>结果>>无>>答案

<小时 />

1>>>>>>>> 2>>>>>>>>1>>>>>>>>>1>>>>>>>>1.33>>>> 1>>> 1.33
0>>>>>>>> 0>>>>>>>>2>>>>>>>>>2>>>>>>>>1.25>>>> 2>>> 1.25
0>>>>>>>> 0>>>>>>>>1>>>>>>>>>0>>>>>>>>1.25>>>> 3>>> 1

当 true 与 false 相加时,两个结果列表时,结果为真,就像您添加 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;

我知道使用"具有"一词会使查询速度变慢,但没有其他可用的解决方案。希望这能解决您的查询。