文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ORACLE 实现全文检索

ORACLE 实现全文检索

时间:2010-10-10  来源:Conqueror

以下是配置oracle全文检索的方法
用具有sysdba权限的用户登录

SQL> grant ctxapp to market_new;

Grant succeeded.

用户ctxsys登录
SQL> connect ctxsys/lzdyxin
ERROR:
ORA-28000: the account is locked

Warning: You are no longer connected to ORACLE.

用户被锁,解锁
SQL> conn sys/lzdyxin as sysdba
Connected.
SQL> alter user ctxsys account unlock;

User altered.
SQL> connect ctxsys/lzdyxin;
Connected.
SQL> grant execute on ctx_ddl to market_new;

Grant succeeded.


使用应用用户连接

BEGIN
ctx_ddl.create_preference ('my_lexer', 'chinese_vgram_lexer');  --配置词法分析器


--配置储存参数
ctx_ddl.create_preference ('mystore', 'BASIC_STORAGE');
ctx_ddl.set_attribute ('mystore', 'I_TABLE_CLAUSE', 'tablespace index ');
ctx_ddl.set_attribute ('mystore', 'I_INDEX_CLAUSE', 'tablespace indx compress 2 ');
END;

建立索引

create index index_article_content on article_content (article_content)
indextype is ctxsys.context parameters ('lexer my_lexer');

查询方法
把原来的条件改写一下:
普通:where lower(article_content) like '%关键词%'
现在: where contains(article_content,'%关键词%')>0

改后查询报如下错误
ORA-29902: error in executing ODCIIndexStart()
ORA-20000: Oracle Text error
DRG-51030: wildcard query expansion resulted in too many terms

最后发现语法问题,作如下修改
contains(article_content,'%关键词%')>0
contains(article_content,'关键词')>0 ---------取掉'%'

问题解决

索引同步
create or replace procedure cont_sync_index as
begin
ctx_ddl.sync_index('index_article_content');
end;
/

VARIABLE jobno number; 

BEGIN
   DBMS_JOB.SUBMIT(:jobno,'cont_sync_index();', 
   SYSDATE, 'SYSDATE + (1/24/4)'); 
   commit; 
   END; 
   /

索引优化
create or replace procedure cont_optimize_index as
  begin
  ctx_ddl.optimize_index('index_article_content','FULL');
  end;
  /

VARIABLE jobno number; 

BEGIN
  DBMS_JOB.SUBMIT(:jobno,'cont_optimize_index();', 
  SYSDATE, 'SYSDATE + 1'); 
  commit;
  END;
  /

-----完-----        

这里先给出一个简单示例说利用Oracle Text实现全文检索的方法与步骤,在后面在进行具体的说明。Orcale9i提供了Oracle Text Manager可以简化许多工作,所有在Oracle Text Manager中完成的工作,都可以在通过PL/SQL来实现。要使用Oracle Text,必须具有CTXAPP角色或者是CTXSYS用户。Oracle Text为系统管理员提供CTXSYS用户,为应用程序开发人员提供CTXAPP角色。

CTXSYS用户可执行以下任务:启动Oracle Text服务器,执行CTXAPP角色的所有任务。

具有CTXAPP角色的用户可执行以下任务: 创建索引,管理 Oracle Text 数据字典,包括创建和删除首选项,进行Oracle Text 查询,使用 Oracle Text PL/SQL程序包。

使用Oracle Text的步骤:

(1)创建表来保存某些文档。该示例使用一个主关键字列来标识每个文档,使用一个小的VARCHAR2列来保存每个文档。

CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80));

(2)将两个示例文档置入该表:

INSERT INTO docs VALUES (1,'the first doc');

INSERT INTO docs VALUES (2,'the second doc');

COMMIT;

(3)使用Oracle Text Manager来创建和修改首选项,首选项将与索引相关联。

(4)使用Oracle Text Manager创建文本索引。另外,可以输入以下使用默认首选项的 SQL 语句:

CREATE INDEX doc_index ON docs(text) INDEXTYPE IS CTXSYS.CONTEXT;

(5)使用 CONTAINS 函数,发出基于内容的文档查询。例如:

SELECT id FROM docs WHERE CONTAINS (text, 'first') > 0;

这将在文本列包含单词 first (即文档1) 的 docs 中查找所有行。语句中的>0部分是有效的Oracle SQL所必需的,Oracle SQL不支持函数的布尔返回值。

以上只是一个简单的示例,旨在给出使用Oracle Text建立全文索引的完整步骤,归纳起来如下:

(1)建表并装载文本(包含带有需要检索的文本字段)

(2)配置索引

(3)建立索引

(4)发出查询

(5)索引维护:同步与优化(将在后面介绍)

相关阅读 更多 +
排行榜 更多 +
谷歌卫星地图免费版下载

谷歌卫星地图免费版下载

生活实用 下载
谷歌卫星地图免费版下载

谷歌卫星地图免费版下载

生活实用 下载
kingsofpool官方正版下载

kingsofpool官方正版下载

赛车竞速 下载