【发布时间】:2011-09-14 09:40:32
【问题描述】:
我需要 mysql 全文搜索方面的帮助。 我正在寻找名为梦想的书。当我寻找我得到的梦想时
- 我梦想中的印度是所有梦想中最伟大的愿景
- 梦的字典 - 理解梦
- 关于梦想和超越梦想的心理
- 没有梦想
- 只有梦想
- 梦想
- 其他一些书
其实我在寻找梦想 如何将第 6 本书变成第 1 本书。
我想在这种情况下忽略重复的单词梦想。
你可以搜索here
我在不同的标题中都面临着这类问题。
【问题讨论】:
我需要 mysql 全文搜索方面的帮助。 我正在寻找名为梦想的书。当我寻找我得到的梦想时
其实我在寻找梦想 如何将第 6 本书变成第 1 本书。
我想在这种情况下忽略重复的单词梦想。
你可以搜索here
我在不同的标题中都面临着这类问题。
【问题讨论】:
与重复搜索词的列的相关性最高,我能看到的唯一解决方案是使用标准全文搜索进行联合查询以完全匹配,例如:
SELECT * FROM books
WHERE title = 'Dreams'
UNION
SELECT * FROM books
WHERE MATCH(title) AGAINST("Dreams")
这将首先显示完全匹配。
或者你可以
SELECT * FROM books
WHERE MATCH(title) AGAINST("Dreams")
ORDER BY (CASE WHEN title = 'Dreams' THEN 1 ELSE 0 END),.....
【讨论】:
您希望确切的案例成为第一个建议吗?
按顺序尝试:
"ORDER BY ('{$str_search}' = title) DESC"
这将使您搜索的确切大小写搜索词首先出现。
另外2个解决方案:
"ORDER BY ('{$str_search}' LIKE title) DESC"
"ORDER BY ('{$str_search}%' LIKE title) DESC"
第三种解决方案可用于对所有以搜索词开头的内容进行排序。
注意:此解决方案与 CASE WHEN 几乎相同。
【讨论】:
可能不再相关,但如果有人来看,我会建议使用顶部的 levenshtein 函数来解决这个问题。有关更多信息和 mysql 中的完整实现,请参见下文
【讨论】:
我只能建议使用正则表达式: http://dev.mysql.com/doc/refman/5.1/en/regexp.html
【讨论】: