问题描述
我们有一个带有blob列的表,该表存储了各种文件 (如PDF,TIF,WORD等) 的blob,并且blob字段具有Oracle text index INDEXTYPE是CTXSYS.CONTEXT,以便我们能够在blob中搜索文本。我们看到使用CONTAINS的搜索查询给出了意想不到的结果。
以下是我们遵循的步骤:
1) 在blob字段上使用CTXSYS.CONTEXT索引创建表
2) 用一个OCR的blob (PDF) 填充表,并带有诸如 “executted”,“对应”,“purchase”,“original”,“marathon” 之类的单词,但没有单词 “w2”
3) 执行ctx_ddl.sync_index以同步索引。
4) 运行搜索查询。
搜索查询找不到PDF中的单词,但找到了PDF中没有的单词。为什么搜索结果会有所不同?
与Oracle Database 12c Enterprise Edition版本12.1.0.2.0-64bit生产中预期的工作原理相同。我已经比较了19和12.1.0.2之间的所有停止词,没有什么不同。
谢谢,
下面是脚本。
=
--- 表格脚本
=
-将BLOB插入表格
---- 我看不到在此处上传测试文件的选项
---- 请让我知道我该怎么做。
=
-- 指数优化
=
-- 搜索查询
计数 (1)
----------
1
选择1行。
-以下查询返回1,但文件没有单词 'w2'
计数 (1)
----------
1
选择1行。
-以下查询返回0,但文件具有所有搜索词
计数 (1)
----------
0
选择1行。
============================================
03/04/2020上午6:15 CST:
根据要求,我已通过电子邮件发送测试文档以asktom_us@oracle.com主题 “问题9542416600346626815”
谢谢。
以下是我们遵循的步骤:
1) 在blob字段上使用CTXSYS.CONTEXT索引创建表
2) 用一个OCR的blob (PDF) 填充表,并带有诸如 “executted”,“对应”,“purchase”,“original”,“marathon” 之类的单词,但没有单词 “w2”
3) 执行ctx_ddl.sync_index以同步索引。
4) 运行搜索查询。
搜索查询找不到PDF中的单词,但找到了PDF中没有的单词。为什么搜索结果会有所不同?
与Oracle Database 12c Enterprise Edition版本12.1.0.2.0-64bit生产中预期的工作原理相同。我已经比较了19和12.1.0.2之间的所有停止词,没有什么不同。
谢谢,
下面是脚本。
=
--- 表格脚本
CREATE TABLE OTXT_ORC_IMAGES_TGT_TEST4
(
ISN NUMBER NOT NULL,
DOCUMENT_BLOB BLOB,
DOCUMENT_BLOB_FORMAT VARCHAR2(30 BYTE)
);
CREATE INDEX DOC_IMG_BLOB_TGT_TEST4 ON OTXT_ORC_IMAGES_TGT_TEST4
(DOCUMENT_BLOB)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS(' DATASTORE CTXSYS.DEFAULT_DATASTORE
FORMAT COLUMN DOCUMENT_BLOB_FORMAT
NOPOPULATE ');
CREATE UNIQUE INDEX PK_OTXT_ORC_IMAGES_TGT_TEST4 ON OTXT_ORC_IMAGES_TGT_TEST4
(ISN);
ALTER TABLE OTXT_ORC_IMAGES_TGT_TEST4 ADD (
CONSTRAINT PK_OTXT_ORC_IMAGES_TGT_TEST4
PRIMARY KEY
(ISN)
USING INDEX PK_OTXT_ORC_IMAGES_TGT_TEST4
ENABLE VALIDATE);
=
-将BLOB插入表格
---- 我看不到在此处上传测试文件的选项
---- 请让我知道我该怎么做。
INSERT INTO OTXT_ORC_IMAGES_TGT_TEST4 (ISN, DOCUMENT_BLOB_FORMAT,DOCUMENT_BLOB) Values (29035, 'BINARY', '&BLOB'); COMMIT;
=
-- 指数优化
BEGIN
ctx_ddl.sync_index ('DOC_IMG_BLOB_TGT_TEST4'
,'500M'
,NULL
,4);
END;
/
=
-- 搜索查询
SELECT COUNT (1) FROM OTXT_ORC_IMAGES_TGT_TEST4 i;
计数 (1)
----------
1
选择1行。
-以下查询返回1,但文件没有单词 'w2'
SELECT COUNT (1) FROM OTXT_ORC_IMAGES_TGT_TEST4 i WHERE 1 = 1 AND isn = 29035 AND CONTAINS (i.document_blob, 'w2') > 0;
计数 (1)
----------
1
选择1行。
-以下查询返回0,但文件具有所有搜索词
SELECT COUNT (1)
FROM OTXT_ORC_IMAGES_TGT_TEST4 i
WHERE 1 = 1
AND isn = 29035
AND CONTAINS (
i.document_blob
,'marathon or executed or purchase or original or correspondence') >
0;
计数 (1)
----------
0
选择1行。
============================================
03/04/2020上午6:15 CST:
根据要求,我已通过电子邮件发送测试文档以asktom_us@oracle.com主题 “问题9542416600346626815”
谢谢。
专家解答
您能否通过电子邮件将文档发送给asktom_us@oracle.com,主题为 “问题9542416600346626815”。
======================
谢谢你的文件。我无法重现您的脚本和文件的问题...
所以有几件事要检查
1) 确保正确加载斑点
2) 在索引创建上启用跟踪。请参阅下面的帖子
https://blogs.oracle.com/searchtech/oracle-text-indexes-new-logging-and-tracing-methods-in-12cr2
看看你能不能从那里得到什么。
希望这有所帮助。
======================
谢谢你的文件。我无法重现您的脚本和文件的问题...
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
1 row selected.
SQL> CREATE TABLE OTXT_ORC_IMAGES_TGT_TEST4
2 (
3 ISN NUMBER NOT NULL,
4 DOCUMENT_BLOB BLOB,
5 DOCUMENT_BLOB_FORMAT VARCHAR2(30 BYTE)
6 );
Table created.
SQL>
SQL>
SQL> CREATE INDEX DOC_IMG_BLOB_TGT_TEST4 ON OTXT_ORC_IMAGES_TGT_TEST4
2 (DOCUMENT_BLOB)
3 INDEXTYPE IS CTXSYS.CONTEXT
4 PARAMETERS(' DATASTORE CTXSYS.DEFAULT_DATASTORE
5 FORMAT COLUMN DOCUMENT_BLOB_FORMAT NOPOPULATE');
Index created.
SQL>
SQL> CREATE UNIQUE INDEX PK_OTXT_ORC_IMAGES_TGT_TEST4 ON OTXT_ORC_IMAGES_TGT_TEST4
2 (ISN);
Index created.
SQL>
SQL> ALTER TABLE OTXT_ORC_IMAGES_TGT_TEST4 ADD (
2 CONSTRAINT PK_OTXT_ORC_IMAGES_TGT_TEST4
3 PRIMARY KEY
4 (ISN)
5 USING INDEX PK_OTXT_ORC_IMAGES_TGT_TEST4
6 ENABLE VALIDATE);
Table altered.
SQL>
SQL>
SQL> declare
2 l_tgt_idx int := 1;
3 l_src_idx int := 1;
4 l_bf bfile;
5 l_blob blob;
6 begin
7 insert into otxt_orc_images_tgt_test4
8 (isn, document_blob_format,document_blob)
9 values
10 (29035, 'BINARY', empty_blob())
11 returning document_blob into l_blob;
12
13 l_bf := bfilename('TEMP', '29035.pdf');
14 dbms_lob.fileopen(l_bf, dbms_lob.file_readonly);
15 dbms_lob.loadblobfromfile (
16 dest_lob => l_blob,
17 src_bfile => l_bf,
18 amount => dbms_lob.lobmaxsize,
19 dest_offset => l_tgt_idx,
20 src_offset => l_src_idx);
21 dbms_lob.fileclose(l_bf);
22
23 commit;
24 end;
25 /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> BEGIN
2 ctx_ddl.sync_index ('DOC_IMG_BLOB_TGT_TEST4'
3 ,'500M'
4 ,NULL
5 ,4);
6 END;
7 /
PL/SQL procedure successfully completed.
SQL>
SQL>
SQL> SELECT COUNT (1)
2 FROM OTXT_ORC_IMAGES_TGT_TEST4 i
3 WHERE 1 = 1 AND isn = 29035 AND CONTAINS (i.document_blob, 'w2') > 0;
COUNT(1)
----------
0
1 row selected.
SQL>
SQL>
SQL> SELECT COUNT (1)
2 FROM OTXT_ORC_IMAGES_TGT_TEST4 i
3 WHERE 1 = 1
4 AND isn = 29035
5 AND CONTAINS (
6 i.document_blob
7 ,'marathon or executed or purchase or original or correspondence') > 0;
COUNT(1)
----------
1
1 row selected.
SQL>
SQL>
所以有几件事要检查
1) 确保正确加载斑点
2) 在索引创建上启用跟踪。请参阅下面的帖子
https://blogs.oracle.com/searchtech/oracle-text-indexes-new-logging-and-tracing-methods-in-12cr2
看看你能不能从那里得到什么。
希望这有所帮助。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




