在 Oracle Text 中,您可以在创建索引时定义一些首选项。在您的情况下,您应该考虑定义自己的LEXER
和 printjoins。
BEGIN
ctx_ddl.create_preference('INV_DEV_LEXER','BASIC_LEXER');
ctx_ddl.set_attribute('INV_DEV_LEXER', 'printjoins','.-_%:;/,()?!*+@');
END;
CREATE TABLE inv_dev (name VARCHAR2(255));
INSERT INTO inv_dev VALUES ('abc-123');
INSERT INTO inv_dev VALUES ('abc-124');
INSERT INTO inv_dev VALUES ('abc-125');
CREATE INDEX inv_dev_idx ON inv_dev(name)
INDEXTYPE IS CTXSYS.CTXCAT
PARAMETERS (
'LEXER INV_DEV_LEXER STOPLIST CTXSYS.EMPTY_STOPLIST'
);
SELECT *
FROM inv_dev
WHERE CATSEARCH (name,'abc-1*',NULL)>0;
如果-
在 printjoins 中未定义 sign 而在 skipjoins 中定义,则该短语'abc-123'
的索引为'abc123'
。
也只是逃避-
with \
,所以:
SELECT *
FROM inv_dev
WHERE CATSEARCH (name,'abc\-1*',NULL)>0;