【问题标题】:Oracle DB - special characters in contains functionOracle DB - 包含函数中的特殊字符
【发布时间】:2015-09-28 22:06:12
【问题描述】:

我有一个存储一些文档内容的 BLOB 字段。

而我的 Java 程序想要在该字段上进行搜索,

这是我的 SQL 语句:

Select * from table_A where CONTAINS(BLOB_FIELD,'{Keyword}') > 0;

当用户输入 'P-' 和 'P=' 时,他们得到了一些结果。 我要解决问题,谢谢!!!

【问题讨论】:

  • 我发现当BLOB_FIELD包含'P.1/1'(页码)时,'P-', 'P=','P"'都输出相同的结果
  • BLOB_FIELD 中存储的文档类型是什么? (pdf,文档?)

标签: java sql oracle special-characters contains


【解决方案1】:

CONTAINS 使用了许多字符/单词,如果您想搜索实际字符(-、=、*、% 等),则必须对其进行转义。试试 'P\-' 看看是否有帮助......如果没有,请参见下文。

此外,您的 LEXER 设置确定 P 之后的一段时间确定分词(句末)的可能性也很高。这由 DBA 控制,并且有一些相当复杂的逻辑来确定如何拆分/不拆分单词以进行文本搜索。

【讨论】:

  • 谢谢,但添加 '' 失败。
  • 正如我所说,我列出的只是包含“特殊”的众多字符中的一小部分。 * 是其中的另一个。 docs.oracle.com/cd/B28359_01/text.111/b28304/… 编辑:我刚刚注意到这里发帖时需要转义反斜杠字符。
  • 我已经阅读了 Oracle 的文档,但没有帮助,我已经用 {} 转义了字符,但问题仍然存在。
  • 您是否按照我的建议检查了词法分析器设置是否有分词?
  • 这对我来说是先进的,但我试图找到如何调整该设置。而且我无法通过使用 CONTAINS(BLOB_FIELD,'{Keyword}') > 0 找到带有 Oracle 保留字的单词,这是解决方法还是没有解决方案??(一些保留字很常见,例如 'OF' 'AND' .......) 非常感谢您帮助我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-25
  • 2014-10-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
  • 2020-01-15
相关资源
最近更新 更多