我非要弄明白不可,对BLOB的全文检索,解决了另开贴放分!
解决方案 »
- oracel触发器问题,值之间的传递。在线等.... 急~!~!~
- 存储过程问题
- 大家来看看怎么解决这个问题
- 奇怪!!!oracle占用了所以的linux系统CUP资源!
- 请问我该分配什么权限给用户,他才可以登陆Oracle Enterprise Manager Console中?
- 要分的来,速结帖
- win2000下orcale 9.2.0.1.0安装时出现“加载数据库时出错:areasQueries”,在线等待。
- 请问,哪里有Oracle9I的下载
- 求助! 存储过程编释出错
- oracle中查询teacher表中各职称最年轻的人员的姓名
- 在Unix只安装Oracle Client是否也要知道root的口令?
- 高分求救??哪位大虾救我啊,这个SQL能不能实现啊
PLS-00904: insufficient privilege to access object CTXSYS.CTX_DDL
ORA-06550: line 2, column 1:
PL/SQL: Statement ignored
ORA-06550: line 4, column 1:
PLS-00904: insufficient privilege to access object CTXSYS.CTX_DDL
http://www.yesky.com/SoftChannel/72342371928965120/20030802/1718653.shtml
都做了一遍,结果和原来一样,对中文检索不好使!!
晕..
没有数据CONTAINS (Content, '1') > 0;数据
contains后面这个参数没有规定是那些类型吗?
Info_Content(Info_Id,Content),并且里面放入了一批数据,用程序调用显示正常.
Info_Id,Number
Content,BLOB
2,接着,我当前用户本身有 权利建索引项,所以直接不需要用SYSTEM在搜权,直接建立索引项
begin
ctx_ddl.create_preference('mylex','BASIC_LEXER');
ctx_ddl.set_attribute('mylex','printjoins','_-');
ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST');
ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',1);
ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 5);
ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
end;
begin
ctx_ddl.create_preference('cnlex','CHINESE_LEXER');
end;
说句实话,这里我不是很清楚,我只是照搬!!
提示成功了
Commit;
3,建索引(当前用户为 User05 Create Index i_Info_Content_table on Info_Content(Content)
indextype is ctxsys.context
parameters ('DATASTORE CTXSYS.DIRECT_DATASTORE
FILTER CTXSYS.INSO_FILTER
LEXER User05.CNLEX
WORDLIST User05.MYWORDLIST');
提示成功
Commit;
4,就是 用了 Select * From Info_Content Where CONTAINS (Content, '广州',1) > 0;
无数据
------
Select * From Info_Content Where CONTAINS (Content, '1',1) > 0;
有数据
-----
Select * From Info_Content Where CONTAINS (Content, 'a',1) > 0;
无数据
实际中,我输入的中文关键词和英文都是有的,但就是查不到记录,忘高手解答
并说明一下,2歩和3歩的具体意思,真正解决的放 300分!!
参考官方文档:
http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/toc.htm
http://www.itpub.net/magazine/itpub200304.rar
it-pub 第四期杂志~ 第一篇~ 玉面飞龙兄在里头讲得很详细~
http://www.itpub.net/magazine/itpub200304.rar
里面的兄弟和晚上搜索的那些基本一样,我看了一遍又按着做了,可是就是不支持中文!搞S我了,为什么呢,是不是让我放弃啊!!还有楼上楼上兄弟,你提供的网我进不去!!
同的 lexer, 而我们通常能用到其中的三个: basic_lexer: 针对英语。它能根据空格和标点来将英语单词从句子中分离,还能自动将一些出现频率过高已经失去检索意义的单词作为‘垃圾’处理,如if , is 等,具有较高的处理效率。但该lexer应用于汉语则有很多问题,由于它只认空格和标点,而汉语的一句话中通常不会有空格,因此,它会把整句话作为一个term,事实上失去检索能力。以‘中国人民站起来了’这句话为例,basic_lexer 分析的结果只有一个term ,就是‘中国人民站起来了’。此时若检索‘中国’,将检索不到内容。
chinese_vgram_lexer: 专门的汉语分析器,支持所有汉字字符集。该分析器按字为单元来分析汉语句子。‘中国人民站起来了’这句话,会被它分析成如下几个term: ‘中’,‘中国’,‘国人’,‘人民’,‘民站’,‘站起’,起来’,‘来了’,‘了’。可以看出,这种分析方法,实现算法很简单,并且能实现‘一网打尽’,但效率则是差强人意。
chinese_lexer: 这是一个新的汉语分析器,只支持utf8字符集。上面已经看到,chinese vgram lexer这个分析器由于不认识常用的汉语词汇,因此分析的单元非常机械,像上面的‘民站’,‘站起’在汉语中根本不会单独出现,因此这种term是没有意义的,反而影响效率。chinese_lexer的最大改进就是该分析器 能认识大部分常用汉语词汇,因此能更有效率地分析句子,像以上两个愚蠢的单元将不会再出现,极大 提高了效率。但是它只支持 utf8, 如果你的数据库是zhs16gbk字符集,则只能使用笨笨的那个Chinese vgram lexer.
如果不做任何设置,Oracle 缺省使用basic_lexer这个分析器。要指定使用哪一个lexer, 可
以这样操作:
第一. 在ctxsys用户下建立一个preference:
Begin
ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
第二. 在建立intermedia索引时,指明所用的lexer:
create index myindex on mytable(mycolumn) indextype is ctxsys.context
parameters('lexer my_lexer');
这样建立的全文检索索引,就会使用chinese_vgram_lexer作为分析器。
如果还不行,你还是把你具体的步骤都贴上来吧ORACLE TEXT的性能不如 TRS等国产中文检索性能要好;而且很占空间。索引一般会在数据的1到4倍之间;而且建立索引的时候需要的临时表空间也和索引大小一样
权限已经由SYSTEM搜给了!
登陆Pl/Sql Developer
1>建索引项(对吧)
SQL> begin
2 ctx_ddl.create_preference('mylex','BASIC_LEXER');
3 ctx_ddl.set_attribute('mylex','printjoins','_-');
4 ctx_ddl.create_preference('mywordlist', 'BASIC_WORDLIST');
5 ctx_ddl.set_attribute('mywordlist','PREFIX_INDEX','TRUE');
6 ctx_ddl.set_attribute('mywordlist','PREFIX_MIN_LENGTH',1);
7 ctx_ddl.set_attribute('mywordlist','PREFIX_MAX_LENGTH', 5);
8 ctx_ddl.set_attribute('mywordlist','SUBSTRING_INDEX', 'YES');
9 end;
10 /PL/SQL procedure successfully completed2>建preference: ---------------------------------------
SQL> begin
2 ctx_ddl.create_preference('cnlex','CHINESE_VGRAM_LEXER');
3 end;
4 /PL/SQL procedure successfully completed
3>建索引!---------------------------------------
SQL> create index i_info_content on info_content(content) indextype is ctxsys.context parameters('lexer cnlex');Index createdSQL> commit;Commit completeSQL> Select * From info_content where CONTAINS (Content, '港澳旅游',1) > 0; INFO_ID CONTENT
---------- -------结果没有数据,我哪步错了呢!
没有 CHINESE_LEXER
CHINESE_VGRAM_LEXER 只有一个
BASIC_LEXER
DEFAULT_LEXER
而另外一个用户有
WK_CHINESE_LEXER
而我在当前用户下 USER05下执行
begin
ctx_ddl.create_preference('cnlex','CHINESE_LEXER');
end; 却没有错误!!
是不是我的框架对象'CHINESE_LEXER' 没有啊,在 管理器中我看不到?可是为什么又不出错呢?是不是问题就在这里啊,请 biti_yumianfeilong(玉面飞龙) 帮忙!! 刚在GOOGLE搜索你的名字一下,荣幸!
Oralce Text Manager >数据库>首选项 右边的列表中
没有
CHINESE_LEXER
CHINESE_VGRAM_LEXER
期待
玉面飞龙
的在一次出现!!
SQL> create table info_content(content varchar2(4000));表已创建。SQL> insert into info_content values('中国人民共和国');已创建 1 行。SQL> commit;提交完成。
SQL> create index i_info_content2 on info_content(content) indextype is ctxsys.
ontext parameters('lexer cnlex');索引已创建。SQL> Select * From info_content where CONTAINS (Content, '中国',1) > 0;CONTENT
-------------------------------------------------------------------------------中国人民共和国SQL> insert into info_content values('索引需要同步,否则无法看见新增的文本');已创建 1 行。SQL> commit;提交完成。SQL> Select * From info_content where CONTAINS (Content, '同步',1) > 0;未选定行SQL> begin
2 ctx_ddl.sync_index('i_info_content2', '2M');
3 end;
4 /PL/SQL 过程已成功完成。SQL> Select * From info_content where CONTAINS (Content, '同步',1) > 0;CONTENT
-------------------------------------------------------------------------------索引需要同步,否则无法看见新增的文本SQL>
看是否为同步的问题
他是 itpub.net 和 cnoug.org 上的知名版主~
楼主还有不明白的话,可以直接找他~ :)
问题是这样解决的
通过查看ctxsys.ctx_parameters发现其中的default_filter_file和default_filter_binary都是inso_filter,所以要修改
execute ctxsys.ctx_adm('default_filter_file','null_filter');
execute ctxsys.ctx_adm('default_filter_binary','null_filter');-------
他也是和我一样,不能找到中文,结果他自己这么解决了,我不知道上面步骤怎么走!!!
http://www.itpub.net/showthread.php?s=&postid=1816335#post1816335
1>我的数据库的字符集是16GBK
2>Content 字段类型是 BLOB 就是和这位仁兄 http://www.itpub.net/showthread.php?s=&postid=1816335#post1816335 的问题一样,我不知道他是怎么解决的?你的方法对VARCHAR2类型是可以的!
http://www.itpub.net/showthread.php?s=&postid=1816335#post1816335
这个兄弟说,要执行execute ctxsys.ctx_adm('default_filter_file','null_filter');
execute ctxsys.ctx_adm('default_filter_binary','null_filter');可是我直接执行,会提示错误!!1我直接修改数据表不可以吗??或者应该怎么做?错误提示ORA-06550: 第 1 行, 第 7 列:
PLS-00221: 'CTX_ADM' 不是过程或尚未定义
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored