您可以创建同义词词典,以使 Basic Text Search 返回指定词语的同义词以及精确匹配项。
要创建同义词词典:
假设您有一个表,其中包含以下语句生成的数据:
CREATE TABLE mytbl(name char(30)); INSERT INTO mytbl(name) VALUES('mark'); INSERT INTO mytbl(name) VALUES('elizabeth'); INSERT INTO mytbl(name) VALUES('marco'); INSERT INTO mytbl(name) VALUES('beth');
您将创建名为 mythesaurus 的同义词词典表,并向其添加同义词数据:
CREATE TABLE mythesaurus(synonyms lvarchar); INSERT INTO mythesaurus(synonyms) VALUES('elizabeth liz beth eliza leisal betty liza'); INSERT INTO mythesaurus(synonyms) VALUES('mark marc marcus marco');
将对同义词词典表创建 bts 索引:
CREATE INDEX mythesaurus_index ON mythesaurus(synonyms bts_lvarchar_ops) USING bts(thesaurus="yes");
将创建 bts 索引,该索引使用表 mytbl 上的同义词词典:
CREATE INDEX name_index ON mytbl(name bts_char_ops) USING bts(thesaurus_index="mythesaurus_index");
现在,当您搜索名称 elizabeth 时,查询将同时返回精确匹配项和同义词 beth:
SELECT * FROM mytbl WHERE bts_contains(name, 'elizabeth'); name elizabeth beth 2 row(s) retrieved.
在搜索两个名称时,查询将返回四个同义词,但不返回精确匹配项:
SELECT * FROM mytbl WHERE bts_contains(name, 'marcus or liza'); name mark marco elizabeth beth 4 row(s) retrieved.