php - 如何使用 MySQL 查询搜索两个字符的单词?

标签 php sql mysql search full-text-search

我正在使用 MySQL 全文搜索(在自然语言模式下)。示例:

SELECT Mem_id FROM Members WHERE MATCH (job_title) AGAINST ('".mysql_real_escape_string($keywordsWanted)."')

我注意到搜索“web开发人员”或“PHP编码器”效果不太好,因此我添加了ft_min_word_len=3 到 MySQL 配置文件 (/etc/mysql/my.cnf)。然而,两个字符的搜索词仍然是一个问题。例如“IT承包商”、“公关经理”、“3D设计”等。这些是我正在考虑尝试的一些策略:

  • 使用 ft_min_word_len=2 - 这不会使索引变得庞大并减慢数据库速度吗?
  • 在关键字少于 3 个字符的情况下更改查询以使用 LIKE?
  • 自动将常见缩写词翻译成完整单词。例如IT->“信息技术”
  • 更改用户界面,以便 Javascript 弹出窗口警告用户 2 个字符的单词不计入在内,因此他们应该重新表述问题
  • 改用 Zend Lucene 或其他搜索技术

你有什么建议/你是如何解决这个问题的?

最佳答案

作为引用,我最终所做的是更改 MySQL 配置文件 (/etc/mysql/my.cnf) 中的“ft_min_word_len=2”。性能似乎并没有明显恶化。与 LIKE/REGEXP 相比,使用 FTS 具有自动结果排名和自动复数匹配的优点。

顺便说一句,我也遇到了一些 MYSQL 停用词的问题。特别是“它”和“我们”(因为它们在我的问题领域中意味着“信息技术”和“美国”)。您可以在此处找到要使用的停用词列表: http://dev.mysql.com/tech-resources/articles/full-text-revealed.html#stopwords 。我将此列表保存到名为 /etc/mysql/stopword_list.txt 的文件中,然后将“ft_stopword_file='/etc/mysql/stopword_file.txt'”添加到 MySQL配置文件。然后我重新启动 MYSQL(sudo/etc/init.d/mysqld restart)并删除并重新创建我的 FTS 索引。

关于php - 如何使用 MySQL 查询搜索两个字符的单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1204792/

相关文章:

sql - 从物化 View DDL 中删除表空间信息

MySQL - 将表数据复制到不同的表

php - 我怎样才能构造一个表,使字段保持原子性?

mysql - 如何在 select 语句中生成条件数字列

javascript - Jquery PHP Mysql 表单提交不起作用

javascript - 如何修复 PHP/SQL 中的添加和删除?

php - 如何在mysql中获取逗号分隔的id的名称?

c++ - 是否有比 Pro*C/C++ 更智能的 Oracle sql 预处理器?

php - 如何防止同时查看两个页面

php - 使用 GZip 压缩输出