Есть ли способ использовать индексы Oracle Text CONTEXT для выполнения нечеткого поиска в 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. создал индекс типа 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 Fuzzy

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. Есть ли правильный способ сделать это (или другие подходы)?

Заранее спасибо.


person Ristyo Arditto    schedule 08.03.2021    source источник
comment
В документации не очень ясно об этом, но fuzzy принимает только ОДНО СЛОВО в качестве первого аргумента - без пробелов. см. аналогичный вопрос для более подробного ответа.   -  person kfinity    schedule 08.03.2021
comment
Что касается вашего более широкого вопроса, Oracle Text сложен, и я не считаю его очень полезным в качестве поисковой системы общего назначения. Но ослабление запроса действительно помогает ему действовать как один.   -  person kfinity    schedule 08.03.2021
comment
Спасибо, я обязательно обновлю позже, когда я успешно / неудачно попробовал это.   -  person Ristyo Arditto    schedule 09.03.2021