我需要搜索一个CLOB列,并且正在寻找最好的方法来实现这一点,我已经看到了使用DBMS_LOB包以及使用Oracle Text之类的在线变体。有人可以提供一个如何做到这一点的快速示例吗?
答案 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);
似乎工作得很好,但我会做一些性能测试,看看它在负载下的工作情况。