带有单词边界的MySQL全文搜索

Mau*_*ice 8 mysql

我已经阅读了一些文章和问题,但找不到令人满意的解决方案.我想在用户填写表单时从数据库中选择相关记录; 以同样的方式,当您提出问题时,此功能在此网站上有效.

考虑列中包含以下三个记录的数据库表 subject

+---+---------------------------------------------------+
| 1 | Pagina aanmaken en beter doorzoekbaar maken       |
+---+---------------------------------------------------+
| 2 | Sorteerfunctie uitbreiden in zoek-en-boek functie |
+---+---------------------------------------------------+
| 3 | Zoek de verschillen tussen de pagina's            |
+---+---------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

我用这个词开始我的搜索查询,zoek所以我想从术语中查询数据库中最相关的结果zoek.我想出了以下查询:

SELECT 
    id, 
    subject, 
    MATCH(
        subject
    ) 
    AGAINST(
        'zoek*'
        IN BOOLEAN MODE
    ) 
    AS 
        score
FROM 
    Issues 
WHERE 
    MATCH(
        subject
    ) 
    AGAINST(
        'zoek*'
        IN BOOLEAN MODE
    )
Run Code Online (Sandbox Code Playgroud)

当我运行这个查询时,我希望显示所有记录和(可能,我不知道MySQL中的特异性如何工作)ID 3显示在顶部(因为确切的单词匹配).

相反,查询的结果只是行2并且3具有完全相同的分数(0.031008131802082062).

我需要在查询中更改哪些内容才能匹配适当的记录?还要考虑用户可以输入关键字或句子.

Céd*_*hon 0

对于您的情况,有一个解决方法:

SELECT 
    id, 
    subject, 
    IF (subject LIKE "zoek %" OR subject LIKE "% zoek %" OR subject LIKE "% zoek", 
        1, 
        IF (subject LIKE "% zoek%",
            0.5,
            IF (subject LIKE "%zoek%",
                0.2,
                0)
            )
        ) as score
FROM 
    Issues 
WHERE subject LIKE "%zoek%"
ORDER by score DESC
Run Code Online (Sandbox Code Playgroud)

预期结果:

+---+---------------------------------------------------+------+
|id |   subject                                         |score |    
+---+---------------------------------------------------+------+
|3  | Zoek de verschillen tussen de pagina's            | 1    |
+---+---------------------------------------------------+------+
|2  | Sorteerfunctie uitbreiden in zoek-en-boek functie | 0.5  |
+---+---------------------------------------------------+------+
|1  | Pagina aanmaken en beter doorzoekbaar maken       | 0.2  |
+---+---------------------------------------------------+------+
Run Code Online (Sandbox Code Playgroud)