oracle 全文检索

zn85600301 2010-09-17 11:13:26
最近一个项目要做全文检索,所以了解了下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只是判断‘俄罗斯’是否出现过,可否能统计它的出现频率呢。
暂时我仅仅用了十万条数据和文件 进行测试,当然真实环境肯定是海量级的数据,所以我想提前问一下,当数据在大量插入时索引按什么策略同步,如何进行索引优化,分区后是否会对索引的同步和优化有性能的提高,因为项目还没开始 只是技术上的探索 所以希望有经验的大侠 可以给一些建议和思路,不胜感激。
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zn85600301 2010-09-26
  • 打赏
  • 举报
回复
begin

ctx_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

为什么 中文的索引没有拆开建立 而且 对英文的查询不区分大小写 ?请大家指教····
zn85600301 2010-09-20
  • 打赏
  • 举报
回复
目前用了10W条记录 和10W个文本文件 里面是中文 文件不大就10来行文字
建索引花了 15分钟时间
查询 用了1.5秒

如果加上分区的话 也许会更快
但是同步索引时 万一数据量太大 会不会挤死DB 有什么好的优化方案?
我是做JAVA的 ORACLE不是很了解
大侠们 给个提示吧
taikongxinke 2010-09-17
  • 打赏
  • 举报
回复
关注!!!!!!
gelyon 2010-09-17
  • 打赏
  • 举报
回复
这个还真没用过。。。
zn85600301 2010-09-17
  • 打赏
  • 举报
回复
额 用过lucene的 也帮忙给些建议
Lucene 和oracle text 对于海量级数据并索引文件 各有什么优势和不足,主要还是性能的考虑?
Diza1986 2010-09-17
  • 打赏
  • 举报
回复
好帖,思考思考,先帮你顶。。。
zn85600301 2010-09-17
  • 打赏
  • 举报
回复
额 大家给点提示吧

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧