我有一个表文档,其中两列有全文索引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/