为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】: DM Database Server 64 V8
【操作系统】:win11
【CPU】: AMD HX370
【问题描述】*:在使用全文索引时,如何获取到文本对应的分词是那些。如:在地址栏我创建了全文索引,sql条件为:XXX市XXX路XXX号,目前可以做分词匹配,但是如何获取该条件文本具体被分为了哪几个词。我需要在前端做高亮显示。
--创建测试表
CREATE TABLE QWSY(QID BIGINT PRIMARY KEY , ADDRESS VARCHAR2(300));
--插入测试数据(略)
--创建全文索引
CREATE CONTEXT INDEX CTI_TEST_ADDRESS ON TEST.QWSY(ADDRESS) LEXER DEFAULT_LEXER;
--查询分词
SELECT WORD FROM TEST.CTI$CTI_TEST_ADDRESS$I;

在达梦的官方文档里面查了下,没找到获取给定文本段分词信息的函数。
想了个笨办法:写个函数,动态创建临时用表并对这个表创建全文索引,然后把全文索引内容取出来。
你看看这个办法是否能够满足需求。
--获取分词的函数 CREATE OR REPLACE FUNCTION F_GET_CTI_TOKEN(V_INPUT VARCHAR2) RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION; V_TMP_TABNAME VARCHAR2(128); V_RET VARCHAR2(32767); BEGIN V_TMP_TABNAME := 'T_'||SYS_GUID; EXECUTE IMMEDIATE 'CREATE TABLE '||V_TMP_TABNAME||'(VAL VARCHAR2(4000))'; EXECUTE IMMEDIATE 'INSERT INTO '||V_TMP_TABNAME||' VALUES(?)' USING V_INPUT; EXECUTE IMMEDIATE 'COMMIT'; EXECUTE IMMEDIATE 'CREATE CONTEXT INDEX CTI_'||V_TMP_TABNAME||' ON '||V_TMP_TABNAME||' (VAL) LEXER CHINESE_LEXER SYNC '; EXECUTE IMMEDIATE 'SELECT LISTAGG(WORD,'','') WITHIN GROUP (ORDER BY ROWID) FROM CTI$CTI_'||V_TMP_TABNAME||'$I' INTO V_RET; EXECUTE IMMEDIATE 'DROP TABLE '||V_TMP_TABNAME||' CASCADE PURGE '; RETURN V_RET; END; --测试 SELECT F_GET_CTI_TOKEN('我这里测试一下看看效果如何,如果效果不好,要再次换一个办法来测试才行'); --返回 我,这里,测试,一下,看看,效果,如何,如果,不好,要,行,再次,换,一个,办法,来,才 SELECT F_GET_CTI_TOKEN('北京市东城区东长安街33号'); --返回 东,33,号,北京市,东城区,长安街