• 金仓数据库 KingbaseES 插件ftutilx



    1. 插件介绍


    ftutilx是一个KingbaseES的扩展,主要用于从存储流版式文件的blob类型字段中抽取文本内容。其中blob类型字段内容可以包括 pdf、doc、docx、wps、xls、xlsx、ppt和pptx格式文件。ftutilx插件不支持加密文件格式。



    2. 加载插件


    在使用ftutilx之前,需要将他添加到kingbase.conf文件的shared_preload_libraries中,并重启KingbaseES数据库。

    shared_preload_libraries = 'ftutilx' # (change requires restart)
    进入KingbaseES创建插件
    CREATE EXTENSION ftutilx;


    3. 参数配置


    ftutilx.max_string_length
    抽取结果最大长度,默认值:128M,该参数设置后立即生效。
    ftutilx.jvm_option_string
    JVM初始化参数,默认值:"-Xmx1024m,-Xms1024m,-Xmn256m,-XX:MetaspaceSize=64m,-XX:MaxMetaspaceSize=128m,-XX:CompressedClassSpaceSize=256m",该参数只在会话进程中首次调用extracttext函数创建JVM时生效,再次设置该参数不再有效。
    在数据库默认扩展加载机制下,在一个会话中创建扩展以后,在新的会话开始后并不是立即加载扩展动态库,而是直到首次调用扩展中的接口时才会加载扩展动态库,导致在这之前在新会话中设置扩展参数无效。 解决方法是:修改数据库配置文件中的shared_preload_libraries或者session_preload_libraries两个参数之一,使参数值包括ftutilx,即可在新会话开始后立即加载ftutilx扩展动态库,并设置扩展参数。


     

    4. 使用ftutilx


    ftutilx插件提供了extracttext函数用于抽取存储在blob类型字段内的文件内容。extracttext函数接受一个代表文件内容的blob类型参数,返回抽取的text类型文本内容。

    CREATE TABLE tab (title text, body blob);
    INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));
    SELECT title, length(extracttext(body)) FROM tab;

    4.1. 使用ftutilx全文检索的联合使用方案
    由于电子文档内容抽取速度较慢,为提高全文检索性能,可以在表中添加存储列,用于存储内容抽取结果或者词位列表。
    方案一:
    CREATE EXTENSION zhparser;
    CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);
    ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

    CREATE EXTENSION ftutilx;
    CREATE TABLE tab (title text, body blob);

    ALTER TABLE tab ADD COLUMN content text GENERATED ALWAYS AS (extracttext(body)) STORED;
    CREATE INDEX tab_idx ON tab USING GIN (to_tsvector('zhparsercfg', content));

    INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

    SELECT title FROM tab WHERE to_tsvector('zhparsercfg', content) @@ to_tsquery('日志');
    方案二:
    CREATE EXTENSION zhparser;
    CREATE TEXT SEARCH CONFIGURATION zhparsercfg (PARSER = zhparser);
    ALTER TEXT SEARCH CONFIGURATION zhparsercfg ADD MAPPING FOR n,v,a,i,e,l WITH simple;

    CREATE EXTENSION ftutilx;
    CREATE TABLE tab (title text, body blob);

    ALTER TABLE tab ADD COLUMN tab_idx_col tsvector GENERATED ALWAYS AS (to_tsvector('zhparsercfg', extracttext(body))) STORED;
    CREATE INDEX tab_idx ON tab USING GIN (tab_idx_col);

    INSERT INTO tab VALUES ('test.doc', blob_import('/home/test/data.doc'));

    SELECT title FROM tab WHERE tab_idx_col @@ to_tsquery('日志');


    4.2. 注意事项
    1) ftutilx需要依赖于jre-1.8.0运行时环境,部署后需要设置LD_LIBRARY_PATH系统环境变量包含jre-1.8.0的libjvm.so路径。
    2) ftutilx.max_string_length 参数用于配置抽取结果的最大长度,但由于tsvector目前最大支持(1M-1),所以extracttext结合to_tsvector使用时,分词结果大小不能超过(1M-1)。
    3) ftutilx需要创建JVM,JVM会占用较多内存。虽然调整ftutilx.jvm_option_string的-Xmx可以限制JVM的内存占用,但过小的-Xmx值会导致大文件解析时JVM发生内存不足异常。
    4) 基于前面的全文检索联合使用方案,在系统内存较少的环境中,需要限制并行插入数据的会话进程数量,以免系统内存被耗尽。


     

    5. 卸载插件

    drop extension ftutilx;

     
  • 相关阅读:
    pytest + yaml 框架 -62.支持yaml和json2种格式用例
    React是什么,怎么用
    android studio创建C++项目
    Python学习记录 模块
    leetcode 刷题 log day 51(股票总结
    蓝牙查看接收到GIF格式的图片报错问题
    ESP32 AT指令模式连接百度云天工物接入
    C++从入门到精通——初步认识面向对象及类的引入
    Win10系统固态硬盘开机慢的解决教程
    SpringBoot开发实用篇
  • 原文地址:https://blog.csdn.net/arthemis_14/article/details/125446597