Oracle全文检索方面的研究(全10)
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; --检索到第二条数据
相关新闻>>
- 发表评论
-
- 最新评论 更多>>