我已经阅读了一些文章和问题,但找不到令人满意的解决方案.我想在用户填写表单时从数据库中选择相关记录; 以同样的方式,当您提出问题时,此功能在此网站上有效.
考虑列中包含以下三个记录的数据库表 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).
我需要在查询中更改哪些内容才能匹配适当的记录?还要考虑用户可以输入关键字或句子.
对于您的情况,有一个解决方法:
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)