最近一个项目要做全文检索,所以了解了下oracle text,现在在测试性能上有些疑惑。
BEGIN
   ctx_ddl.create_preference ('my_datastore_prefs', 'FILE_DATASTORE');
   ctx_ddl.set_attribute ('my_datastore_prefs', 'path', 'd:\TEMP');
END;begin
 ctx_ddl.create_preference('cs_filter', 'CHARSET_FILTER');
 ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');
end;BEGIN
  ctx_ddl.create_preference ('my_lexer', 'chinese_lexer');
END;
BEGIN
  ctx_ddl.create_preference ('my_chinese_lexer', 'CHINESE_VGRAM_LEXER');
END;CREATE TABLE mydocs( id NUMBER PRIMARY KEY, title VARCHAR2(255), thefile 
VARCHAR2(255) );
 
CREATE INDEX mydocs_text_index ON mydocs(thefile) INDEXTYPE IS ctxsys.context
    PARAMETERS('datastore my_datastore_prefs filter cs_filter Lexer my_lexer');SELECT id,title,thefile
  FROM mydocs m
WHERE contains( thefile, '俄罗斯' ) > 0;通过 oracle text 读取服务器本地文件并进行检索,但是这里contains只是判断‘俄罗斯’是否出现过,可否能统计它的出现频率呢。
暂时我仅仅用了十万条数据和文件 进行测试,当然真实环境肯定是海量级的数据,所以我想提前问一下,当数据在大量插入时索引按什么策略同步,如何进行索引优化,分区后是否会对索引的同步和优化有性能的提高,因为项目还没开始 只是技术上的探索 所以希望有经验的大侠 可以给一些建议和思路,不胜感激。

解决方案 »

  1.   

    额 用过lucene的 也帮忙给些建议
    Lucene 和oracle text 对于海量级数据并索引文件 各有什么优势和不足,主要还是性能的考虑? 
      

  2.   

    目前用了10W条记录 和10W个文本文件 里面是中文 文件不大就10来行文字
    建索引花了 15分钟时间
    查询 用了1.5秒如果加上分区的话 也许会更快 
    但是同步索引时 万一数据量太大 会不会挤死DB 有什么好的优化方案?
    我是做JAVA的 ORACLE不是很了解 
    大侠们 给个提示吧
      

  3.   

    beginctx_ddl.create_preference ('my_datastore_prefs', 'FILE_DATASTORE');
    ctx_ddl.set_attribute ('my_datastore_prefs', 'path', 'd:\TEMP'); ctx_ddl.create_preference('cs_filter', 'CHARSET_FILTER');
     ctx_ddl.set_attribute('cs_filter', 'charset', 'UTF8');CTX_DDL.CREATE_PREFERENCE('TEST_FILE_ENGLISH', 'BASIC_LEXER');CTX_DDL.SET_ATTRIBUTE('TEST_FILE_ENGLISH', 'MIXED_CASE', 'YES');ctx_ddl.create_preference ('TEST_FILE_CHINESE', 'CHINESE_VGRAM_LEXER');CTX_DDL.CREATE_PREFERENCE('TEST_FILE_MULTI_LEXER', 'MULTI_LEXER');CTX_DDL.ADD_SUB_LEXER('TEST_FILE_MULTI_LEXER', 'DEFAULT', 'TEST_ENGLISH');CTX_DDL.ADD_SUB_LEXER('TEST_FILE_MULTI_LEXER', 'SIMPLIFIED CHINESE', 'TEST_FILE_CHINESE', 'CHINESE'); 
    end;CREATE TABLE test( id NUMBER PRIMARY KEY, title VARCHAR2(255), thefile 
    VARCHAR2(255) );
     
    INSERT INTO test( id, title, thefile ) VALUES( 1, 'Document1', 'test1.txt');drop index test_text_index
    CREATE INDEX test_text_index ON test(thefile) INDEXTYPE IS CTXSYS.CONTEXT
     PARAMETERS ('datastore my_datastore_prefs filter cs_filter LEXER TEST_FILE_MULTI_LEXER LANGUAGE COLUMN thefile'); 若 test1.txt 文件 如下
    中国人民银行西安分行
    UPDATE
    commitedit
    9595959775
    执行后建立的索引数据表 DR$TEST_TEXT_INDEX$I 里面的索引数据也为
    中国人民银行西安分行
    UPDATE
    commitedit
    9595959775为什么 中文的索引没有拆开建立 而且 对英文的查询不区分大小写 ?请大家指教····