【发布时间】:2021-11-23 06:36:15
【问题描述】:
我在我的计算机上使用 WAMP 作为可搜索数据库,该数据库使用如下所示的 MySQL 查询:
SELECT * FROM table_name WHERE MATCH (field_01, field_02, field_03, field_04, field_05, field_06, field_07, field_08, field_09) AGAINST('\"$searchterm\"' IN BOOLEAN MODE) ORDER BY field_01,field_10,field_11,field_12 ASC
我有一个包含 01 到 09 字段的完整索引,并且此设置在我以前的计算机上运行良好(WAMP 安装至少 5 年)。
但是,在我的新计算机上(使用 MySQL 5.7.31 版安装 WAMP)它只能选择性地工作,即有时不返回任何结果。
我已经研究过这个问题,停用词似乎是解决问题的关键,因为“为什么”、“为”、“和”、“或”等搜索词会出现零结果问题。
我尝试了 ft_stopword_file="" 方法(重新启动 WAMP 并修复表)。没有帮助。
奇怪的是,对于搜索词“what”和MySQL documentation 中列出的其他几个停用词,同样的查询也适用。
在这一点上,我无法看到此查询行为的任何逻辑,我希望有人能指出我可能遗漏的内容。谢谢。
【问题讨论】:
-
欢迎来到 StackOverflow。为什么要在 MySQL 中执行此操作?
-
这是几年前创建的一个相当复杂的系统。现在我只是想将它重新定位到一台新计算机并让它在那里工作。我已经设法解决了这个过程中出现的大部分问题,但这个问题让我很困惑。
-
好吧,有几个很好的理由来重构它。如果您的主要问题是遗留问题,那么这是您重构的机会。停用词列表不需要被视为水平域。而不是字段认为行。在
IN子句中选择所有单词或匹配变得更容易。如果您使用的是平面文件,那么在 PHP 中也会出现同样的问题,请考虑in_array()或类似的。 -
谢谢你,谢里夫。
-
正在使用什么引擎?大概是 InnoDB?但是
ft_stopword暗示 MyISAM?
标签: php mysql match stop-words