【问题标题】:Oracle Text search in Files文件中的 Oracle 文本搜索
【发布时间】:2017-09-04 12:42:27
【问题描述】:

我正在创建一个需要在文本文件(.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;

有什么东西不见了?

【问题讨论】:

    标签: oracle file oracle-text


    【解决方案1】:

    我敢打赌,如果你去,你会得到结果:

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

    确实,INSERT 您不会将文件加载到数据库中!您必须查看一些内容才能将文件加载为 CLOB 或其他内容。

    在 SO 上有一些有趣的帖子可以做同样的事情,比如说

    【讨论】:

    • 您好 Chomel,感谢您的回复。但是,我无法将文档的内容导入数据库。我需要使用流式传输文档的 oracle 功能,如文档中所述:docs.oracle.com/cd/B28359_01/text.111/b28303/…
    • 从文档中我没有得到这个。在示例中,您要在文本中查找的字符串在数据库中,但您将全文提供给 match 函数。当你进入下一章时,你会看到桌子上有一个俱乐部......
    • 在本文档主题中,据说 Datastore 对象从其中一个源(数据库、url 或文件)读取:docs.oracle.com/cd/B28359_01/text.111/b28303/ind.htm#CIHIHJGG 所以我认为没有必要加载文件到数据库中。 (...)例如,如果您已将数据存储定义为 FILE_DATASTORE,则流首先从操作系统读取文件。您还可以将文档存储在 Internet 或 Oracle 数据库中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多