【问题标题】:searching a text column that contains query operator words搜索包含查询运算符单词的文本列
【发布时间】:2018-06-14 11:16:24
【问题描述】:

到目前为止,我一直在解决这个问题,但没有任何运气。 我有一个基本查询,正在搜索列中是否包含单词“或”或“和”。

例如:

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

这样做会引发 oracle 错误:SQL 错误:ORA-29902:执行 ODCIIndexStart() 例程时出错

搜索此网站和一般网络以找到解决方案

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

1, 2

但它不起作用。

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

  • CPAND 和 SLAF
  • QOAND 和 GI

如果我在单词“and”的两端加上两个“%”(pourcentage)(给出这个查询):

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

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

但这不是我要找的:(

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

关于如何解决这个问题的任何想法?

【问题讨论】:

  • MOS 文章 Oracle 文本:使用上下文包含对逗号和点的搜索(文档 ID 807749.1)提供了一些可以提供帮助的更多步骤。
  • 谢谢。我会阅读,看看是否能找到我的问题的答案

标签: oracle text escaping contains


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多