mysql - 如何使 MySQL 全文索引忽略 url 字符串,尤其是扩展名

标签 mysql full-text-search

我在 MySQL 全文中索引包含 URL 的字符串...但我不希望结果中包含 URL。

举个例子,我搜索“PHP”或“HTML”,我得到像“Ibiza Angels Massage Company see funandfrolicks.php”这样的记录……充其量是享乐主义的干扰。

我看不到将正则表达式添加到停用词列表的示例。

我想到(但失败了)的另一件事是创建全文 SQL,并减少单词贡献...但是,在以下 SQL 中,相关值没有改变。

SELECT title, content,match(title,content) against('+PHP >".php"' IN BOOLEAN MODE)
FROM tb_feed 
WHERE match(title,content) against('PHP >".php"' IN BOOLEAN MODE) 
ORDER BY published DESC LIMIT 10;

另一种方法是带有附加条件的凌乱的 SQL 语句......

WHERE ... IF(content REGEXP '.php', content REGEXP '(^| )php', 1) ...

想法...最好的解决方案是什么?

最佳答案

如果结果的数量可以接受,您可以选择不显示匹配您想要忽略的单词。例如 .php 或 .html。这很容易搞砸,但会涉及使用比您需要更多的内存。

另一种解决方案是使用您要搜索的关键字创建另一个字段。使用此字段,您可以省略 url 和任何其他不需要的关键字。此解决方案的写入时间很短,但会占用额外的硬盘空间。

更好的解决方案是创建另一个名为关键字(或类似名称)的表。当用户提交搜索查询时,将搜索关键字表以查找指定的关键字。上传或检索内容时,通过拆分输入数据来填充关键字表。

最后一个选项的优点可能是速度快,数据紧凑,因为关键字仅存储一次,索引指向主要内容记录。如果您愿意,它可以进行巧妙的搜索。

关于mysql - 如何使 MySQL 全文索引忽略 url 字符串,尤其是扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1450887/

相关文章:

mysql - 有没有办法在 MySQL 语句中通过 REGEXP 进行排序?

mysql - Python3 从 MySQL 比较中提取日期无法正常工作

ruby-on-rails - 我是否需要去除标签以改进搜索?

elasticsearch - 全文和 knn_vector 混合搜索弹性

php - 如何制作安全的注册表单

php - 如何在 MySql 中更新 Json 数据类型?

php - 如何正确清理 html post 以保存在 mysql 中

mysql - InnoDB 的始终索引的 MySQL 索引/搜索替代品?

mysql - 在 WHERE ... MATCH ... AGAINST... 语句中转义保留字符?

sql - 无法对表或索引 View 使用 CONTAINS 或 FREETEXT 谓词,因为它不是全文索引