14 个解决方案
#1
oracle可以定义多字段的索引但建太多的索引不一定是好事情,可能会提高个别查询方式的效率但可能会降低数据存储的效率。建议通过构造索引字段的查询条件来完成。
#2
如果没有什么规律的话很难再进行优化了
#3
据说Oracle Text可以的。
#4
试试oracle ultra search
http://tech.ccidnet.com/pub/article/c294_a26547_p1.html
http://tech.ccidnet.com/pub/article/c294_a26547_p1.html
#5
SIMPLY SAMPLE(9i):
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80));
INSERT INTO docs VALUES (1,'the first doc');
INSERT INTO docs VALUES (2,'the second doc');
COMMIT;
CREATE INDEX doc_index ON docs(text)
INDEXTYPE IS CTXSYS.CONTEXT;
SELECT id FROM docs WHERE CONTAINS (text, 'FIRST') > 0;
alter index doc_index rebuild online parameters ( 'sync');
前提:已有ORACLE TEXT。
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80));
INSERT INTO docs VALUES (1,'the first doc');
INSERT INTO docs VALUES (2,'the second doc');
COMMIT;
CREATE INDEX doc_index ON docs(text)
INDEXTYPE IS CTXSYS.CONTEXT;
SELECT id FROM docs WHERE CONTAINS (text, 'FIRST') > 0;
alter index doc_index rebuild online parameters ( 'sync');
前提:已有ORACLE TEXT。
#6
Petergepeter(拔刀斋):
这种用法我看到了,但只是对一个字段进行全文检索。
我现在要对多个字段同时进行全文检索,如标题、摘要、内容等,如何实现?
这种用法我看到了,但只是对一个字段进行全文检索。
我现在要对多个字段同时进行全文检索,如标题、摘要、内容等,如何实现?
#7
再CREATE一个INDEX,在WHERE里加OR。
以前没用过,还在研究中。
以前没用过,还在研究中。
#8
建立多个全文索引可以实现,也可以进行模糊查询,如:Contains(字段名,'%要查询的字符串%') > 0,如果是查询中文可以先设置中文的词法分析器。
Email:cqhw2003@126.com
Email:cqhw2003@126.com
#9
关于全文索引:
http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/toc.htm
http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/toc.htm
#10
asktom.oracle.com 上面去搜索 interMedia
#11
我已经建了多个索引,也查了几次,并做了几次同步。
但某次同步之后,就出错了,把索引drop掉,重建都不成功(oracle 8.1.7
),提示错误:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-10502: 索引 I_PCRM_INFO_KEYWORDS 不存在
DRG-50857: oracle error in drdmlpo
ORA-00600: 内部错误代码,自变量: [], [], [], [], [], [], [], []
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 78
ORA-06512: 在line 1
但某次同步之后,就出错了,把索引drop掉,重建都不成功(oracle 8.1.7
),提示错误:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-10502: 索引 I_PCRM_INFO_KEYWORDS 不存在
DRG-50857: oracle error in drdmlpo
ORA-00600: 内部错误代码,自变量: [], [], [], [], [], [], [], []
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 78
ORA-06512: 在line 1
#12
多字段全文检索有一种很简单的方法可以实现,你可以试试:对要检索的多个字段都建立全文索引,查询的时候用contains(*,'keyword')的方式进行。另外还有一种是创建一个包含要做全文检索的多个字段的group组,然后对这个组做全文索引。
#13
细节可以发mail交流一下:huogang@hylanda.com
#14
用oracle text
简单的示例
这里先给出一个简单示例说利用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)索引维护:同步与优化
简单的示例
这里先给出一个简单示例说利用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)索引维护:同步与优化
#1
oracle可以定义多字段的索引但建太多的索引不一定是好事情,可能会提高个别查询方式的效率但可能会降低数据存储的效率。建议通过构造索引字段的查询条件来完成。
#2
如果没有什么规律的话很难再进行优化了
#3
据说Oracle Text可以的。
#4
试试oracle ultra search
http://tech.ccidnet.com/pub/article/c294_a26547_p1.html
http://tech.ccidnet.com/pub/article/c294_a26547_p1.html
#5
SIMPLY SAMPLE(9i):
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80));
INSERT INTO docs VALUES (1,'the first doc');
INSERT INTO docs VALUES (2,'the second doc');
COMMIT;
CREATE INDEX doc_index ON docs(text)
INDEXTYPE IS CTXSYS.CONTEXT;
SELECT id FROM docs WHERE CONTAINS (text, 'FIRST') > 0;
alter index doc_index rebuild online parameters ( 'sync');
前提:已有ORACLE TEXT。
CREATE TABLE docs (id NUMBER PRIMARY KEY, text VACHAR2(80));
INSERT INTO docs VALUES (1,'the first doc');
INSERT INTO docs VALUES (2,'the second doc');
COMMIT;
CREATE INDEX doc_index ON docs(text)
INDEXTYPE IS CTXSYS.CONTEXT;
SELECT id FROM docs WHERE CONTAINS (text, 'FIRST') > 0;
alter index doc_index rebuild online parameters ( 'sync');
前提:已有ORACLE TEXT。
#6
Petergepeter(拔刀斋):
这种用法我看到了,但只是对一个字段进行全文检索。
我现在要对多个字段同时进行全文检索,如标题、摘要、内容等,如何实现?
这种用法我看到了,但只是对一个字段进行全文检索。
我现在要对多个字段同时进行全文检索,如标题、摘要、内容等,如何实现?
#7
再CREATE一个INDEX,在WHERE里加OR。
以前没用过,还在研究中。
以前没用过,还在研究中。
#8
建立多个全文索引可以实现,也可以进行模糊查询,如:Contains(字段名,'%要查询的字符串%') > 0,如果是查询中文可以先设置中文的词法分析器。
Email:cqhw2003@126.com
Email:cqhw2003@126.com
#9
关于全文索引:
http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/toc.htm
http://download-west.oracle.com/docs/cd/B10501_01/text.920/a96518/toc.htm
#10
asktom.oracle.com 上面去搜索 interMedia
#11
我已经建了多个索引,也查了几次,并做了几次同步。
但某次同步之后,就出错了,把索引drop掉,重建都不成功(oracle 8.1.7
),提示错误:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-10502: 索引 I_PCRM_INFO_KEYWORDS 不存在
DRG-50857: oracle error in drdmlpo
ORA-00600: 内部错误代码,自变量: [], [], [], [], [], [], [], []
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 78
ORA-06512: 在line 1
但某次同步之后,就出错了,把索引drop掉,重建都不成功(oracle 8.1.7
),提示错误:
ORA-29855: 执行 ODCIINDEXCREATE 例行程序时出错
ORA-20000: interMedia Text 错误:
DRG-10502: 索引 I_PCRM_INFO_KEYWORDS 不存在
DRG-50857: oracle error in drdmlpo
ORA-00600: 内部错误代码,自变量: [], [], [], [], [], [], [], []
ORA-06512: 在"CTXSYS.DRUE", line 126
ORA-06512: 在"CTXSYS.TEXTINDEXMETHODS", line 78
ORA-06512: 在line 1
#12
多字段全文检索有一种很简单的方法可以实现,你可以试试:对要检索的多个字段都建立全文索引,查询的时候用contains(*,'keyword')的方式进行。另外还有一种是创建一个包含要做全文检索的多个字段的group组,然后对这个组做全文索引。
#13
细节可以发mail交流一下:huogang@hylanda.com
#14
用oracle text
简单的示例
这里先给出一个简单示例说利用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)索引维护:同步与优化
简单的示例
这里先给出一个简单示例说利用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)索引维护:同步与优化