gpt4 book ai didi

MySQL 为一列禁用停用词

转载 作者:行者123 更新时间:2023-11-29 06:05:15 25 4
gpt4 key购买 nike

是否可以只为一张表甚至一列禁用停用词?我知道有一些选项可以全局禁用它。我需要这个来使用两种类型的搜索:

a) 标准 bool 模式搜索(此处忽略所有停用词)
b) 自动完成搜索(这里我不想忽略任何单词,因为如果用户键入“the”,我不知道它是整个单词还是前 3 个字母。我可以有两列具有相同的数据,例如: title 和 title_autocomplete,但我怎样才能只为一列禁用停用词机制?

示例:

a) 用户输入 'The' 什么都不返回,因为 'the' 是停用词
b) 用户类型 'The' 返回所有以 'the' 开头或仅包含 'the' 词,如 'Thermal..' 或 'The most important..'

我希望使用一个 MySQL 服务器实例来获得这两个选项。

最佳答案

MySQL 不支持不同列的不同非索引字表,您也不能,例如在您进行搜索之前临时禁用或启用非索引字表(无需重建索引)。但这里有一些解决这个问题的想法:

  • 如果您的标准搜索真的应该像您的示例所暗示的那样只查找完整的单词,例如"the word" 的用户输入将导致类似 match(title) against ('+the +word' in boolean mode) 的查询,而相应的自动完成搜索将结果 match(title) against ('+the* +word*' in boolean mode),您可以直接在您的应用程序中模拟此行为。在 MySQL 中禁用停用词表,但在应用程序中维护自己的内部停用词表;检查用户输入,不要将这些词添加到您的搜索查询中(并且当您没有任何词时不要执行任何操作)。

  • 您可以添加一个仅包含主键和 title 列的 MyISAM 表,并通过触发器使它们保持同步。 InnoDB 和 MyISAM 每个都有自己的非索引字表,因此这听起来可能与您正在寻找的内容很接近。但是这种方法有一些主要问题:MyISAM 不支持事务,因此如果您回滚 InnoDB 表中的更改,它们将不会在 MyISAM 中回滚。如果您将 MyISAM 用于您的主表(您不应该这样做),请不要对该表使用事务或者您的数据是静态的,这可能是一个选项。另一个问题是 MyISAM 将在下一个版本的 MySQL 中被删除。

  • 禁用停用词列表,添加一列 title_withoutstopwords 并维护可用于标准搜索的标题的“清理”版本。这意味着您需要编写一个函数来删除文本中的所有停用词。您可以使用该函数的输出,例如在触发器中保持您的列同步。这可能是最安全的方法,但会有点冗长。

  • 禁用停用词列表并随后在您的客户端中过滤标准搜索的结果(或者接受结果可能包含停用词)。

关于MySQL 为一列禁用停用词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42096585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com