【问题标题】:PHP/MySQL: match / against escaping stopwordPHP/MySQL:匹配/反对转义停用词
【发布时间】:2021-06-26 16:06:12
【问题描述】:

这是我的查询:

SELECT * from description WHERE (match(description) AGAINST ( '+will +smith' in boolean mode)) 

我知道will 是一个停用词,这就是我得到空结果的原因。 如果我仍然可以在这个查询中使用这两个词,它会如何工作?我需要以某种方式逃避它吗?

【问题讨论】:

    标签: php mysql stop-words


    【解决方案1】:

    对于给定的搜索,没有办法“转义”停用词。可以这样想:创建全文索引时,如果它们是停用词,它会跳过索引词。即,单词不存储在全文索引中。因此,您不能随后在给定搜索中转义该词,并让一个词神奇地出现在全文索引中,因为创建索引时未包含该词。

    假设您在 InnoDB 中使用全文搜索,解决方案显然是定义您自己的表来存储停用词。然后您可以将一组自定义的单词放入表中,并使用配置变量innodb_ft_server_stopword_table 使您的 MySQL 实例在创建全文索引之前使用您的自定义表。这样,您想要索引的单词将在构建全文索引时包含在内。

    https://dev.mysql.com/doc/refman/8.0/en/fulltext-stopwords.html

    但这是一个全局变量,因此它将影响该 MySQL 实例上所有表上的所有全文索引创建。我想您可以将innodb_ft_server_stopword_table 设置为您的自定义表,构建您的全文索引,然后将选项设置回其通常值。但这会很棘手,因为无论何时重建全文索引(例如在更改表或优化表期间),它都会恢复为默认停用词。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2019-07-17
      • 1970-01-01
      • 2010-09-24
      • 2023-04-09
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多