基于以下简化表:
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);