MySql全文搜索不正确,包含短词

MySql全文搜索不正确,包含短词,mysql,sql,search,Mysql,Sql,Search,经过多次尝试和搜索,我得出以下查询: SELECT id, title, description, MATCH(title,description,tags) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AS score FROM pages 我使用此查询在包含音乐课程的大量页面中进行搜索。它工作得很好。页面根据它们与查询的匹配程度获得分数 除非用户搜索C弦或Am弦,否则第一部分将被忽略。如果我搜索一个和弦

经过多次尝试和搜索,我得出以下查询:

SELECT id,
       title,
       description,
       MATCH(title,description,tags) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AS score
FROM pages
我使用此查询在包含音乐课程的大量页面中进行搜索。它工作得很好。页面根据它们与查询的匹配程度获得分数

除非用户搜索C弦或Am弦,否则第一部分将被忽略。如果我搜索一个和弦或E和弦,称为C和弦的页面总是在顶部

所以。。我问题的第一部分是:我如何解决这个问题


然后是第二部分。是否有可能让列标题对分数的重要性高于描述?

MySQL有两个重要的全文搜索参数,即停止词和最小字长。第一个是记录的最小字数:

Innodb:默认值3 MyIsam:默认值为4 短于最小值的单词不会被编入索引,因此您无法对其进行搜索。请记住在更改参数后重新生成索引。哈哈!它们有不同的默认值

此外,还有停止词列表来删除常见的停止词。这是否是一个问题取决于你在搜索什么词。您可以自定义停止词

问题 这一点已经讨论过很多次了:MySQL内置的全文解析器是为字符而设计的,而不是为单个字符而设计的,并且带有默认的最小字长设置3或4。这些设置意味着没有短于3或4个单词的单词被索引,因此全文搜索不会找到。您可以将最小字符长度限制降低到1并重建索引,但这会减慢搜索速度,因为索引会更大

问题 这是可能的,但您需要单独搜索标题字段,并从标题字段中增加相关性得分结果

您可以使用union获得一个包含sum的组合列表,以汇总任何记录的分数:

SELECT p.id, any_value(title), any_value(description), any_value(tags), sum(t.score) as sum_score
FROM
    (SELECT id, (MATCH(title) AGAINST ('$search' IN NATURAL LANGUAGE MODE)) *2 AS score
     FROM pages
     UNION ALL
     SELECT id, MATCH(description,tags) AGAINST ('$search' IN NATURAL LANGUAGE MODE) AS score
     FROM pages) t
INNER JOIN pages p on t.id=p.id
GROUP BY p.id
ORDER BY sum(t.score) DESC

您需要调整全文索引,以便能够进行单独的搜索。

不过,大多数全文索引都有一个最小字长的索引。我相信Mysql的默认值是4。