gpt4 book ai didi

database - Oracle Text - 索引 BLOB 字段(包含 PDF 数据)

转载 作者:搜寻专家 更新时间:2023-10-30 20:45:42 25 4
gpt4 key购买 nike

你们有没有使用 Oracle Text 在 PDF 文件中搜索内容的经验?

我有一个表,其中有一个名为 FILEDATA(blob) 的字段。

我想做以下查询:

SELECT id FROM ttc.contract_attachment WHERE CONTAINS(filedata, 'EXAMPLE') > 0;

但是,我不太确定要添加到其中的索引类型。

我找到了以下代码:

begin 
ctx_ddl.create_preference('doc_lexer', 'BASIC_LEXER');
ctx_ddl.set_attribute('doc_lexer', 'printjoins', '_-');
end;
/

create index idxContentMgmtBinary on CMDEMO.CONTENT_INVENTORY(TEXT) indextype is ctxsys.context
parameters ('lexer doc_lexer sync (on commit)');

引用:http://www.devx.com/dbzone/Article/21563/1954

我不知道 BASIC_LEXER 是什么。我有点不知所措。我将努力继续寻找答案。任何帮助都会很棒。

谢谢。

最佳答案

我不仅使用 Oracle Text 来索引 PDF,还使用 ​​XML 结构等其他数据。 Oracle 具有词法分析器的概念,它获取内容并解析、标记化和索引标记。基本词法分析器处理英文单词,还有其他词法分析器用于中文、日文、韩文等。printjoin 属性允许您索引通常被排除的字符,例如连字符、引号等。

您在上面定义的索引将起作用。请记住,Oracle Text 索引是一个异步过程,这意味着发生提交,然后在将来的某个时间对文档进行索引。但是,您需要将索引作为计划作业等的一部分进行同步。使用索引上的“同步(提交时)”选项,它将索引文档作为事务的一部分。仅当您索引的 PDF 文档相当大时,这一点才值得注意。

我建议对您可能想要运行的任何搜索使用渐进式放松,因为它可以用于限制性搜索并扩展为更通用的搜索,从而为用户提供相关性降低的结果。例如:

    <query>
<textquery lang="ENGLISH" grammar="CONTEXT"> cat dog
<progression>
<seq><rewrite>transform((TOKENS, "{", "}", " "))</rewrite></seq>
<seq><rewrite>transform((TOKENS, "{", "}", "AND"))</rewrite></seq>
<seq><rewrite>transform((TOKENS, "{", "}", "ACCUM"))</rewrite></seq>
</progression>
</textquery>
<score datatype="INTEGER" algorithm="COUNT"/>
</query>

上面的查询将搜索关键字“cat dog”标记化,试图将它们找到一个短语,然后任何包含 cat AND dog 的文档(不一定彼此相邻),然后任何包含 cat OR dog 的文档,包含这两个词的文档是比一个文档只有一个文档得分更高。此外,该结构在返回结果时会自动删除重复数据。

综上所述,您可以简单地将索引定义为:

create index idxContentMgmtBinary on CMDEMO.CONTENT_INVENTORY(TEXT) 
indextype is ctxsys.context
parameters ('sync (on commit)');

它可能会很好地满足您的需求。如果您需要这样做,您只需要更改词法分析器的行为。我希望这会有所帮助。

关于database - Oracle Text - 索引 BLOB 字段(包含 PDF 数据),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3297844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com