MySQL-普通索引与全文

时间:2019-06-25 21:01:03

标签: mysql indexing full-text-search fulltext-index

基于以下简化表:

CREATE TABLE Lexicon (
    id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
    term VARCHAR(100),
    entry TEXT,
) ENGINE=InnoDB;

您将如何在数据库中查询条目中不存在的诸如术语之类的东西?还是任何条目中都不存在的术语

我当时在考虑利用FULLTEXT INDEX on Lexicon(entry),但是AGAINST()查询的MATCH()部分不允许我传递任何绑定。

SELECT term FROM Lexicon 
WHERE NOT MATCH(entry) AGAINST('only-literals-allowed-here' IN BOOLEAN MODE);

那么,全文索引在这种情况下是否可以使用,或者采用带有常规模式匹配查询的纯索引是唯一的方法?

例如(检查自己的条目):

SELECT term FROM Lexicon
WHERE entry NOT LIKE CONCAT ('%', term, '%');

或更可怕的是(检查表上的所有条目):

SELECT LexiconB.term FROM Lexicon as LexiconA
JOIN Lexicon as LexiconB ON LexiconA.entry NOT LIKE CONCAT('%', LexiconB.term, '%')
GROUP BY LexiconB.term
HAVING COUNT(*) = (SELECT count(*) FROM Lexicon);

0 个答案:

没有答案