您可以创建同义词词典,以使 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.