当前位置:网站首页>金仓数据库 KingbaseES 插件ftutilx
金仓数据库 KingbaseES 插件ftutilx
2022-06-25 10:45:00 【沉舟侧畔千帆过_】
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)
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;
边栏推荐
- 戴尔科技演绎“快”字诀,玩转CI/CD
- 16 种企业架构策略
- Google Earth Engine (Gee) - evaluate réalise le téléchargement en un clic de toutes les images individuelles dans la zone d'étude (certaines parties de Shanghai)
- 无心剑中译伊玛·拉扎罗斯《新巨人·自由女神》
- 浅谈二叉树
- Is it safe for Guosen Securities to open a securities account
- 【文件包含漏洞-04】经典面试题:已知某网站仅存在本地文件包含漏洞时,如何GetShell?
- [paper reading | deep reading] line: large scale information network embedding
- 每日3题(3)-检查整数及其两倍数是否存在
- Kotlin implements a simple login page
猜你喜欢

Coscon'22 lecturer solicitation order

SystemVerilog(十三)-枚举数据类型

COSCon'22 讲师征集令

之前字符串反转的题目
![[today in history] June 24: Netease was established; The first consumer electronics exhibition was held; The first webcast in the world](/img/f7/b3239802d19d00f760bb3174649a89.jpg)
[today in history] June 24: Netease was established; The first consumer electronics exhibition was held; The first webcast in the world

XSS attack

Garbage collection mechanism

【图像融合】基于形态学分析结合稀疏表征实现图像融合附matlab代码

Use of three-level linkage plug-ins selected by provinces and cities

网易开源的分布式存储系统 Curve 正式成为 CNCF 沙箱项目
随机推荐
撸一个随机数生成器
A five-year technical Er, based on the real experience of these years, gives some suggestions to the fresh students
好好思考
【历史上的今天】6 月 24 日:网易成立;首届消费电子展召开;世界上第一次网络直播
[file containing vulnerability-03] six ways to exploit file containing vulnerabilities
Oracle彻底卸载的完整步骤
Five types of questions about network planning
OpenCV学习(二)---树莓派上安装opencv
3 Questions par jour (3) - vérifier l'existence d'entiers et de leurs doubles
Shardingsphere proxy 5.0 sub database and sub table (I)
持续交付-Jenkinsfile 语法
无心剑中译伊玛·拉扎罗斯《新巨人·自由女神》
Flask blog practice - archiving and labeling of sidebar articles
手机办理长投学堂证券开户靠谱安全吗?
Is it safe to open an account with Guangzhou securities by mobile phone?
Complete steps for a complete Oracle uninstall
垃圾回收机制
Flutter adds event listening | subscription
性能之内存篇
Opencv learning (II) -- installing opencv on raspberry pie