mysql - MySQL 全文搜索与 OR 结合使用时出现问题?

标签 mysql full-text-search

我有一个表文档,其中两列有全文索引headline_idx标题文本,其中文本是一个 MEDIUMTEXT 列,还有一些其他字段,其中一个名为 lang。

如果我执行以下选择:

select * from Document where lang= 'en' AND match(headLine,text) against ("test")

一切正常,全文索引按预期使用,但是如果我将 AND 更改为 OR,如下所示:

select * from Document where lang= 'en' OR match(headLine,text) against ("test")

不使用全文索引,如果我执行EXPLAIN EXTENDED,它甚至不是possible_keys的一部分,这使得任何索引提示都没用。

我非常乐意将第三列添加到全文索引中,但在实际情况下,该列位于另一个表中。我运行 MySQL 5.1.35 版本。

对正在发生的事情有什么想法吗?

最佳答案

引用自MySql引用: Index Merge不适用于全文索引。我们计划在未来的 MySQL 版本中对其进行扩展以涵盖这些内容。

这个特定的查询可以用联合重新表述,然后它将使用索引:

select * from Document where lang= 'en' UNION
select * from Document where match(headLine,text) against ("test")

关于mysql - MySQL 全文搜索与 OR 结合使用时出现问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1872668/

相关文章:

php - 从 PHP 查询结果中选择 .change 交换缩略图

node.js - ElasticSearch - 搜索精确的文本匹配而不在索引中保留两个副本?

mysql - 使用 InnoDB 表进行全文搜索

mysql - 跨多个相关表的相关性搜索

使用属性进行 Django-haystack 结果过滤?

c# - ElasticSearch 与 SQL 全文搜索

mysql - 针对另外两个表选择一个表中缺少的行?

MySQL 数据库结构将值推送到一个字段或创建新表

php - 通过 href 将变量传递给另一个 php

mysql - SQL从2个表中选择,其中键不在1个表的某些行中