搜索包含查询运算符单词的文本列

时间:2018-01-04 17:00:50

标签: oracle text escaping contains

到目前为止,我一直没有运气这个问题。 我有一个基本查询,即搜索单词'或'或者'和'列中包含。

例如:

SELECT * FROM MyTable
WHERE CONTAINS(title, 'and', 1) > 0

执行此操作会引发oracle错误:SQL错误:ORA-29902:执行ODCIIndexStart()例程时出错

搜索此网站和网页以寻找解决方案

找到这两个帖子,我给了我一个关于如何转义这个关键字的提示

12

但它没有用。

我知道我有标题所在的行(例如):

  • CPAND AND SLAF
  • QOAND AND GI

如果我坚持两个'%' (pourcentage)在单词'和'的两端。 (提供此查询):

SELECT * FROM MyTable
WHERE CONTAINS(title, '%and%', 1) > 0

我没有错误,但在我的结果中,我得到的字词包含字符串'和' (像QOANDOA)。 请注意,我可以添加一个'%'它也可以工作

但它并不是我所寻找的:(

使用{}转义会返回一个空结果。使用' /'

也是如此

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:1)

您应该创建一个上下文索引,并定期对其进行同步,以便与应用于拥有该索引的表的DML保持同步。这可以通过使用ctx_ddl.sync_index:

来完成
SQL> create index idx_title on mytable(title) indextype is ctxsys.context;

Index created.

SQL> exec ctx_ddl.sync_index('idx_title'); -- there are lots of arguments optional, in this case i left the other args. as default

PL/SQL procedure successfully completed.

SQL> SELECT * FROM MyTable;   

TITLE
--------------
CPAND AND SLAF
QOAND AND GI
QOANDOA

SQL> SELECT * FROM MyTable
WHERE CONTAINS(title, '%AND%', 1) > 0;  2  

TITLE
--------------
CPAND AND SLAF
QOAND AND GI