日期:2014-05-16 浏览次数:20447 次
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 lex