搜索Oracle CLOB列的最佳方法是什么?

时间:2010-08-16 12:45:46

标签: sql oracle

我需要搜索一个CLOB列,并且正在寻找最好的方法来实现这一点,我已经看到了使用DBMS_LOB包以及使用Oracle Text之类的在线变体。有人可以提供一个如何做到这一点的快速示例吗?

3 个答案:

答案 0 :(得分:3)

Oracle Text索引就是这样。您可以使用CONTEXT或CTXRULE索引。 CONTEXT可用于非结构化文档,其中CTXRULE对结构化文档更有帮助。

This链接将提供索引类型和更多信息。句法。

您需要考虑的最重要的因素是LEXER& STOPLIST。

您还可以阅读asktom.oracle.com上的帖子

http://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:5533095920114

答案 1 :(得分:1)

您的CLOB中有什么?您在搜索什么?

如果您正在搜索单词或短语(可能是您在CLOB中拥有的单词或短语),那么Oracle Text是很好的。有时你会在CLOB中存储一些“奇怪的”,比如XML或者网络服务调用的返回值,这可能是一个不同的鱼。

答案 2 :(得分:1)

我最近需要这样做并提出以下解决方案(使用Spring JDBC)

String sql = "select * from clobtest where dbms_lob.instr(myclob, ? , 1, 1) > 0";
return (String) getSimpleJdbcTemplate().getJdbcOperations().queryForObject(sql, new RowMapper<Object>() {
  public String mapRow(ResultSet rs, int rowNum) throws SQLException {
    String clobText = lobHandler.getClobAsString(rs, "myclob");
    return clobText;
  }
}, searchText);

似乎工作得很好,但我会做一些性能测试,看看它在负载下的工作情况。