0

我有一个表格,其中包含以下数据 -

Table
abc-123
abc-124
abc-125

当我在 catsearch 下面做时,它运行良好 -

select * from table
where  CATSEARCH (columna,'abc-*',NULL)>0

但是当我在 * 之前添加 1 时,它给了我错误

select * from table
where  CATSEARCH (columna,'abc-1*',NULL)>0

ORA-29902:执行 ODCIIndexStart() 例程时出错 ORA-20000:Oracle 文本错误:DRG-51030:通配符查询扩展导致术语过多

我做错了什么,请帮助理解问题

4

1 回答 1

0

在 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;
于 2020-04-28T19:06:19.907 回答