1

テーブル内の 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. CONTEXT 型のインデックスを作成しました
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 あいまいテキスト検索

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 ではなくテキスト列で機能するように見えるため、これに間違った方法でアプローチした可能性があることを認識しています。これを行う適切な方法(または他のアプローチ)はありますか?

前もって感謝します。

4

0 に答える 0