微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法使用 Oracle Text CONTEXT Indexes 对 BLOB 进行模糊搜索?

如何解决有没有办法使用 Oracle Text CONTEXT Indexes 对 BLOB 进行模糊搜索?

我正在尝试创建一个搜索功能,在表中搜索 BLOB 的内容。我一直在关注这个链接作为基线: https://oracle-base.com/articles/9i/full-text-indexing-using-oracle-text-9i

我有下表,里面有几行BLOB:

sql> desc dm_document
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 DOCUMENT_NO                                        VARCHAR2(100)
 DOCUMENT_TYPE                                      VARCHAR2(100)
 DOCUMENT                                           BLOB
 FILENAME                                           VARCHAR2(255)
 MIMETYPE                                           VARCHAR2(100)
 LAST_UPDATE_DATE                                   DATE
 HOSTNAME                                           VARCHAR2(255)
 URL                                                VARCHAR2(255)
 FOLDER_NAME                                        VARCHAR2(255)
 FOLDER                                             VARCHAR2(10)
 CATEGORYID                                         VARCHAR2(10)
 SUBCATEGORYID                                      VARCHAR2(10)
 VERSIONID                                          VARCHAR2(10)
 APPRovalID                                         VARCHAR2(10)
 UPLOAD_TYPE                                        VARCHAR2(50)

我所做的是:

  1. 创建了一个上下文类型的索引
CREATE INDEX dm_document_idx ON DM_DOCUMENT(DOCUMENT) INDEXTYPE IS CTXSYS.CONTEXT;
  1. 之后,我使用简单的搜索查询表,例如:
SELECT 
score(1) score,DOCUMENT_NO,DOCUMENT_TYPE,FILENAME,MIMETYPE
FROM  DM_DOCUMENT
WHERE  CONTAINS(DOCUMENT,'dokumen',1) > 0
ORDER BY score(1) DESC;

哪个有效,我已将其集成到我的 Oracle APEX 应用中。

但是,搜索功能非常严格,需要准确的单词和句子。 我想用户会希望他们搜索的词更加宽容。 为了找到解决方案,我搜索了有关模糊搜索内容,我的搜索指向以下链接

Oracle Fuzzy text search

https://docs.oracle.com/cd/B13789_01/text.101/b10730/cqoper.htm

这促使我尝试以下查询

sql> SELECT
  2  score(1) score,3  DOCUMENT_NO,4  DOCUMENT_TYPE,5  FILENAME,6  MIMETYPE
  7  FROM  DM_DOCUMENT
  8  WHERE  CONTAINS(DOCUMENT,'fuzzy(dokumen inii,70,6,weight)',1) > 0
  9  ORDER BY score(1) DESC;
SELECT
*
ERROR at line 1:
ORA-29902: error in executing ODCIIndexStart() routine
ORA-20000: Oracle Text error:
DRG-50901: text query parser Syntax error on line 1,column 15

我知道我可能以错误的方式处理了这个问题,因为模糊函数似乎适用于文本列而不是 BLOB。有没有合适的方法来做到这一点(或其他方法)?

提前致谢。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。