gpt4 book ai didi

php - MySQL 一个真正的 LIKE 语句

转载 作者:可可西里 更新时间:2023-11-01 07:21:14 24 4
gpt4 key购买 nike

我正在帮助一位 friend 为他正在从事的项目构建各种词典。该项目的一部分是创建搜索功能。数据库在 MySQL 中,后端在 php 中。

现在,运行我们的简单查询是小菜一碟:

 SELECT *,
(
(CASE WHEN word LIKE '%$query%' THEN 1 ELSE 0 END) +
(CASE WHEN defin LIKE '%$query%' THEN 1 ELSE 0 END)
) AS relev
FROM dictionary
WHERE word LIKE '%$q%'
OR defin LIKE '%$q%'
ORDER BY relev DESC;

它产生了很好的效果;例如,输入“fire”得到了 fire、firemen、firetruck、on fire 等。但是,我们也希望有错误的余地:我们希望错误“prnk”给我们带来 prank、prink 和 pink,或者单词“骡子”也暗示了“鼹鼠”这个词。

令人惊讶的是,我们找不到任何关于它的信息。相关性系统完全是肤浅的,因为我们不需要实际的相关性(只是一个整体指针),但我们确实需要一些东西(这就是为什么我们选择 LIKE 语句而不是 MATCH...AGAINST 语句,在那里我们找不到任何地方按相关性排序。)

数据库只包含三个东西:id,word,defin。就这么简单,因为这就是所需的复杂性(或简单性)。

提前感谢任何人。

最佳答案

尝试测试这个词听起来是否像字典中的一个,所以类似于:

SELECT *,
(
(CASE WHEN word LIKE '%$query%' THEN 1 ELSE 0 END) +
(CASE WHEN defin LIKE '%$query%' THEN 1 ELSE 0 END) +
(CASE WHEN LEFT(SOUNDEX(word), 4) = LEFT(SOUNDEX('$query'), 4) THEN 1 ELSE 0 END) +
(CASE WHEN LEFT(SOUNDEX(defin), 4) = LEFT(SOUNDEX('$query'), 4) THEN 1 ELSE 0 END)
) AS relev
FROM dictionary
WHERE word LIKE '%$q%'
OR defin LIKE '%$q%'
ORDER BY relev DESC;

关于php - MySQL 一个真正的 LIKE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5507462/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com