当前位置: 首页 > 面试题库 >

忽略查询中的mysql全文停用词

李言
2023-03-14
问题内容

我正在建立一个利用全文搜索的网站搜索。搜索本身效果很好,这不是我的问题。我将用户提供的关键字(MATCH … AGAINST
…)与AND串在一起,以便多个单词进一步缩小结果范围。现在,我知道某些索引词没有被索引,这对我来说很好,我真的不想使用它们作为选择标准。但是,如果(由用户)在关键字集中提供了停用词,则即使该词实际上位于某个文本块中,它也会杀死所有结果(如预期的那样)。

我的问题:在查询时,是否有任何方法可以检查某个单词是否为停用词?我的首选解决方案是从搜索条件中排除相关的单词(我不在乎用户是否可以通过“都不”来缩小结果,我只是不希望MySQL返回空结果集,因为用户即使结果中都不存在)。还是我只需要清空停用词列表?非常感谢您的帮助。

编辑----很抱歉,但实际上没有提供此功能的代码段。该代码工作正常,实际上完全符合预期。我正在处理的更多是逻辑上的问题。但以示例的方式进行说明:

假设有3条记录,其中包含单词(但不限于)

1:苹果,橙,芒果,香蕉2:葡萄,橙,菠萝,芒果3:土豆,芒果,瓜,凯拉骑士

如果用户输入的搜索词是mango,则所有结果均正确返回。如果单词是橙色AND芒果,则返回结果1和2(正确)。现在,假设香蕉是一个停用词(不是……但让我们假设它是),如果搜索的是桔子,芒果和香蕉,则不会返回任何结果(因为香蕉不在全文索引中)。

我正在寻找的是其他任何人都遇到过这个问题,并且有一种解决方法。有点:

if 'banana' NOT STOP WORD match 'banana' against `words`. (OBVIOUSLY not real code).

或者…我只是必须删除停用词列表…


问题答案:

您可以通过比较所有停用词来验证关键字。这是停用词的列表, 我已经找到了一种禁用全文停用词的解决方案。您只需要找到.cnf文件并将其添加,

ft_stopword_file = ""

重启mysql引擎并重建索引;

希望这项工作



 类似资料:
  • 问题内容: 我有一个由不同线程同时读取的表。 每个线程必须选择100行,在每行上执行一些任务(与数据库无关),然后它们必须从表中删除选定的行。 使用此查询选择行: 我的问题是:如何忽略(或跳过)以前使用MySQL中的select语句锁定的行? 问题答案: 我通常创建一个默认为NULL的process_id列,然后让每个线程使用唯一的标识符来执行以下操作: 这样可以确保每个线程从表中选择唯一的行集。

  • 问题内容: 什么是运行查询以便忽略字段中的空格的最佳方法?例如,以下查询: 将找到以下条目: 我正在使用php或python,但我认为这没有关系。 问题答案:

  • 问题内容: 我需要从第二个表中选择一些行,并将它们连接成逗号分隔的字符串。除一个问题外,查询效果很好-它始终选择所有行,并忽略LIMIT。 这是我的查询的一部分,该查询获取该字符串并忽略LIMIT: 完整查询: 问题答案: LIMIT子句限制最终结果集中的行数,而不是用于在GROUP_CONCAT中构造字符串的行数。由于您的查询在最终结果中仅返回一行,因此LIMIT无效。 您可以通过使用LIMIT

  • 和使用它的字段: 当使用Solr分析工具时,一切看起来都很好。 查询部分如下: null null

  • 问题内容: 我正在寻找一种创建忽略空格的学说查询的方法。我尝试用replace,但是我一直都收到 预期的已知功能,得到“替换” 我的查询看起来像: 问题答案: 好的,我编写了一个替换DQL函数。 接下来在app / config.yml中,我添加: 最后,我在控制器中创建了一个DQL查询: 最有趣的是,“引号”非常重要。这意味着您可以在select,from,setParameter和orderB

  • Spring Hateoas没有为以下请求映射创建适当的链接: 致电/会员/12345时,您希望返回: 但相反,它返回: 这是为什么?即使我使用@Request estParam,它也完全忽略了过滤器。在这件事上,任何建议都将受到赞赏。