日期:2014-05-16  浏览次数:20436 次

【引用】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 lex