テーブル内の 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)
私がやったことは次のとおりです。
- CONTEXT 型のインデックスを作成しました
CREATE INDEX dm_document_idx ON DM_DOCUMENT(DOCUMENT) INDEXTYPE IS CTXSYS.CONTEXT;
- その後、次のような単純な検索を使用してテーブルをクエリします。
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 アプリに統合しました。
ただし、検索機能は非常に厳密で、正確な単語や文章が必要です。ユーザーは、検索する単語にもっと寛大さを求めているのではないかと思います。解決策を見つけるために、あいまい検索に関して検索しました。検索すると、次のリンクが表示されます。
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 ではなくテキスト列で機能するように見えるため、これに間違った方法でアプローチした可能性があることを認識しています。これを行う適切な方法(または他のアプローチ)はありますか?
前もって感謝します。