Текстовый поиск Oracle в файлах

Я создаю базу данных, которая должна искать в текстовых файлах (.doc, .txt, .pdf, ...). Начните создавать предпочтение:

ctx_ddl.create_preference('DOCSPIDER_DIR','FILE_DATASTORE');

Я не присваиваю значение «путь», так как могут быть подкаталоги. Затем я создаю таблицу:

create table document (id number, path varchar2(2000));
ALTER TABLE document ADD (CONSTRAINT document_pk PRIMARY KEY (ID));

Создайте индекс:

create index document_index on document(path)
indextype is ctxsys.context
parameters ('datastore DOCSPIDER_DIR filter ctxsys.auto_filter');

И команда для синхронизации:

ctx_ddl.sync_index('document_index', '2M');

После создания структуры вставляю запись, указывающую на существующий документ:

INSERT INTO document VALUES (1, '\\server\oracle_text_files\file_name.txt');

Однако, когда вы запускаете запрос для поиска содержимого этого документа, он не возвращает данные:

SELECT * from document WHERE CONTAINS(path, 'test', 1) > 0;

Чего-то не хватает?


person Cesar    schedule 04.09.2017    source источник


Ответы (1)


Бьюсь об заклад, вы получите результаты, если пойдете:

SELECT * from document WHERE CONTAINS(path, 'txt', 1) > 0;

Действительно, это INSERT не загрузит файл в базу данных! Вы должны что-то посмотреть, чтобы загрузить файл как CLOB или что-то в этом роде.

На SO есть интересные сообщения, чтобы сделать то же самое, скажем

person J. Chomel    schedule 04.09.2017
comment
Привет, Хомель, спасибо за ваш ответ. Однако я не могу импортировать содержимое документов в базу данных. Мне нужно будет использовать функцию оракула для потоковой передачи документа, как указано в документации: docs.oracle.com/cd/B28359_01/text.111/b28303/ - person Cesar; 04.09.2017
comment
Из документации я этого не понимаю. В примере строка, которую вы хотите найти в тексте, находится в базе данных, но вы отдаете полный текст функции сопоставления. Когда вы переходите к следующей главе, вы видите, что на столе есть дубинка... - person J. Chomel; 04.09.2017
comment
В этом разделе документации говорится, что объект хранилища данных считывается из одного из источников (базы данных, URL-адреса или файлов): docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#CIHIHJGG Поэтому я не думаю, что необходимо загружать содержимое файлов в базу данных. (...)Например, если вы определили хранилище данных как FILE_DATASTORE, то поток начинается с чтения файлов из операционной системы. Вы также можете хранить свои документы в Интернете или в базе данных Oracle. - person Cesar; 04.09.2017