如表产品product中 字段:产品名称 name如果我只要根据产品名称用全模糊查该产品信息:也就是执行sql: select * from product where name like '%某某%';如果在字段name上建立索引,那么上面的查询,还是进行全表扫描,而不是根据索引检索,如何才能强制它检索索引,而用的还是上面的sql语句!
我不知道为什么oracle没有让索引支持全模糊查询,但是sql server 可以支持,如果30万条纪录的一张表,字段加起来大概3000个char,那么如果要全模糊查一条纪录的时间简直慢的让人无法忍受(5-10)分钟。 可是用sql server却快得多。 为什么sql server 可以做到的,oracle 确做不到!!!!
关注中,我知道怎么做一个字段的全文索引,但是就是找不到对多个字段怎么做? 一个字段的范例:--0、 前提:建库语句 CREATE TABLE aclob( ID VARCHAR2(20) , CCLOB CLOB, UU VARCHAR2(40), VID NUMBER(10) ); --创建索引 CREATE INDEX "INDEXCCLOB" ON "ACLOB"("VID") COMPRESS --1、设置词法分析器(lexer) begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end; /--2、创建全文索引 create index myindex on aclob(cclob) indextype is ctxsys.context parameters('lexer my_lexer'); --3、使用job定时同步和优化 -- sync: VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''myindex'');', SYSDATE, 'SYSDATE + (1/24/4)'); commit; END; /-- optimizer VARIABLE jobno number; BEGIN DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');', SYSDATE, 'SYSDATE + 1'); commit; END; --其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一 次全优--化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。 4、使用全文检索 SELECT id,cclob FROM aclob WHERE contains(cclob, '00', 1)>0;
多个字段的需要建立user_datastore
zhaoxuerui(sherry) 能说的详细一点吗??
楼上的,创建索引的时候出现如下错误:SQL> create index doc_index on document(location) indextype is ctxsys.context parameters('lexer my_lexer');
ERROR at line 1: ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine ORA-20000: interMedia Text error: DRG-10502: index DOC_INDEX does not exist DRG-11102: assigned lexer can not operate on AMERICAN_AMERICA.WE8ISO8859P1 language setting ORA-06512: at "CTXSYS.DRUE", line 126 ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 78 ORA-06512: at line 1 如何解决?
有没有执行这一句? begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end; /
那么你说说什么是索引?
用别的办法能实现么?
可是用sql server却快得多。
为什么sql server 可以做到的,oracle 确做不到!!!!
能否说清楚一些,你说的intermedia 索引是不是大型搜索引擎都是用这种技术?
那么如果中文支持的不好的话,为什么google的搜索却比较准确?
hyee(慧风) ,你能否说清楚一些吗?
不过google做的更好不然人家怎么能做成 搜索殷勤 ?intermedia: 你可以去 http://asktom.oracle.com 搜索
一个字段的范例:--0、 前提:建库语句
CREATE TABLE aclob(
ID VARCHAR2(20) ,
CCLOB CLOB,
UU VARCHAR2(40),
VID NUMBER(10)
);
--创建索引
CREATE INDEX "INDEXCCLOB"
ON "ACLOB"("VID")
COMPRESS
--1、设置词法分析器(lexer) begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
/--2、创建全文索引 create index myindex on aclob(cclob) indextype is ctxsys.context
parameters('lexer my_lexer');
--3、使用job定时同步和优化
-- sync:
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.sync_index(''myindex'');',
SYSDATE, 'SYSDATE + (1/24/4)');
commit;
END;
/-- optimizer
VARIABLE jobno number;
BEGIN
DBMS_JOB.SUBMIT(:jobno,'ctx_ddl.optimize_index(''myindex'',''FULL'');',
SYSDATE, 'SYSDATE + 1');
commit;
END;
--其中, 第一个job的SYSDATE + (1/24/4)是指每隔15分钟同步一次,第二个job的SYSDATE + 1是每隔1天做一 次全优--化。具体的时间间隔,你可以根据自己的应用的需要而定。至此,你的全文检索功能已设置完成。 4、使用全文检索
SELECT id,cclob FROM aclob WHERE contains(cclob, '00', 1)>0;
ERROR at line 1:
ORA-29855: error occurred in the execution of ODCIINDEXCREATE routine
ORA-20000: interMedia Text error:
DRG-10502: index DOC_INDEX does not exist
DRG-11102: assigned lexer can not operate on AMERICAN_AMERICA.WE8ISO8859P1
language setting
ORA-06512: at "CTXSYS.DRUE", line 126
ORA-06512: at "CTXSYS.TEXTINDEXMETHODS", line 78
ORA-06512: at line 1
如何解决?
begin ctx_ddl.create_preference('my_lexer','chinese_vgram_lexer'); end;
/