Oracle全文检索方面的研究(全10)

来源:未知 责任编辑:责任编辑 发表时间:2013-12-22 14:57 点击:

4、操作实例

4.1 单列与多列支持中文检索

Create table mytable1(id number primary key, doc1 varchar2(400),doc2 clob,doc3 clob);

 

Insert into mytable1 values(1,今天的天气很不错,我想去逛街,今天是星期天,不用上班。天天好心情,明天是星期一,要上班。心情不好);

Insert into mytable1 values(2,天是蓝色的,万里无云。天气非常好。,天是多云的,天气看起来要下雨了。不适宜出门,天正在下雨,大雨倾盆。不能出门。);

Insert into mytable1 values(3,this is a text,this is a word,this is a pdf);

Commit;

 

--先删除引用

begin

ctx_ddl.drop_preference(my_chinese_vgram_lexer);

ctx_ddl.drop_preference(my_chinese_lexer);

end;

 

--支持中文分词

Begin

ctx_ddl.create_preference(my_chinese_vgram_lexer, chinese_vgram_lexer);

ctx_ddl.create_preference(my_chinese_lexer, chinese_lexer);

End;

 

--先删除引用

begin

ctx_ddl.drop_preference(my_multi);

end;

--多列查询,如果仅仅是单列,则不用设置这个类型

Begin

Ctx_ddl.create_preference(my_multi, multi_column_datastore);

Ctx_ddl.set_attribute(my_multi, columns, doc1, doc2, doc3);

End;

 

 

drop index myindex;

 

--单列查询,支持中文的索引建立

Create index myindex on mytable(docs)

indextype is ctxsys.context

parameters (datastore ctxsys.default_datastore lexer foo.my_chinese_lexer)

 

drop index idx_mytable;

--多列查询,支持中文的索引的建立

Create index idx_mytable on mytable1(doc1)indextype is ctxsys.context

parameters(datastore my_multi lexer foo.my_chinese_lexer);

 

--chinese_lexer词法分析器下的结果,三列都可以查询

Select * from mytable1 where contains(doc1, 今天)>0;  --检索到第一条数据

Select * from mytable1 where contains(doc1, 不适宜)>0; --检索到第二条数据

Select * from mytable1 where contains(doc1, 适宜)>0; --检索不到数据,他的分词技术太简单,将‘不适宜’作为一个词了

Select * from mytable1 where contains(doc1, 出门)>0;  --检索到第二条数据

Select * from mytable1 where contains(doc1, this is a word)>0;  --检索到第三条数据,中英文适用

 

 

--chinese_vgram_lexer词法分析器下的结果,

--chinese_vgram_lexer词法分析器虽然没那么智能,但检索结果往往比较符合我们的要求,

--如:“不适宜”这个词语应该拆分为“不适宜”和“适宜”两个词语,而不是单独的作为一个词语,

--chinese_vgram_lexer可以查询的到,而chinese_lexer不可以。

drop index idx_mytable;

--多列查询,支持中文的索引的建立

Create index idx_mytable on mytable1(doc1)indextype is ctxsys.context

parameters(datastore my_multi lexer foo.my_chinese_vgram_lexer);

 

--chinese_vgram_lexer词法分析器下的结果,三列都可以查询

Select * from mytable1 where contains(doc1, 今天)>0;  --检索到第一条数据

Select * from mytable1 where contains(doc1, 不适宜)>0; --检索到第二条数据

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • Table函数使用简介
  • Oracle数据库Constraint约束的常用操作及异常处理
  • Bulk Collect性能分析(zz)
  • export/import的使用
  • OCP043第十五讲 Database Security
  • ORACLE10gr2数据导入MySQL方案
  • oracle 让sys用户可以使用isqlplus
  • 在oracle数据库下使用iSQL*Plus DBA访问数据库
  • Oracle行列转换小结
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1