本例按照嵌入式报表DQL JDBC+NLQ JDBC来做演示。
为了帮助用户快速上手,安装包自带了一个词典文件orders.nlq,位于[安装根目录]\report\dct\zh\汉语查询教程示例.zip中,接下来以此文件为例讲述如何部署NLQ 服务:
(一) 加载所需jar包
将以下NLQ JDBC需要使用的jar放在应用程序能加载到的目录下,获取路径为报表[安装根目录]\report\web\webapps\demo\WEB-INF\lib。
nlq-***.jar NLQ 服务计算引擎及JDBC驱动包
esproc-bin-***.jar 集算器基础包
json-20240303.jar 解析JSON格式串
report-***.jar 润乾报表核心包
本例使用嵌入式报表版DQL,所以还要将报表版DQL的JDBC驱动包datalogic-***.jar和数据库驱动包hsqldb-2.7.3-jdk8.jar一并放到加载目录下(已有可跳过)。
如果DQL连接了其他物理数据源,需要添加对应数据库的驱动jar包。本例HSQL驱动包获取路径为报表[安装根目录]\common\jdbc。
(二) 准备配置文件
准备两个配置文件raqsoftConfig.xml和nlqConfig.xml
l raqsoftConfig.xml,文件名可自定义
在raqsoftConfig.xml中配置NLQ JDBC使用的DQL数据源和授权信息,具体配置如下:
<Runtime>
<DBList>
<DB name="DQL4Orders">
<property name="url" value="jdbc:datalogic://?lmd=E:\files\dql\orders.lmd&dct=&vsb=&db.url=jdbc:hsqldb:hsql://127.0.0.1/orders&db.driver=org.hsqldb.jdbcDriver&db.user=sa&db.password=&db.type=13" />
<property name="driver" value="com.datalogic.jdbc.LogicDriver" />
</DB>
……
</DBList>
<Report>
<license>E:\licenses\defaultlicensetrial_zh.xml</license>
… …
</Report>
</Runtime>
参数说明:
1) DBList 配置DQL数据源信息。
本例用的是报表嵌入式DQL JDBC。使用安装包自带的元数据文件orders.lmd,获取路径为报表[安装根目录]\report\services\orders\conf。如果需要更具体的了解DQL JDBC的参数配置,可参考嵌入式DQL部署集成。
NLQ 使用嵌入式DQL JDBC时,config会使用NLQ 的配置。
2) license 需使用“汉语查询”功能点的润乾报表授权。按绝对路径和类路径次序查找授权文件。
l nlqConfig.xml,文件名不可修改,需放在类路径
在nlqConfig.xml中配置NLQ,具体内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Config version="1">
<NLQList>
<NLQ name ="nlq1">
<DB>DQL4Orders</DB>
<MetaData>dql\orders.nlq</MetaData>
<RaqsoftConfig>raqsoftConfig.xml</RaqsoftConfig>
</NLQ>
<NLQ name = "nlq2">
<DB>DQLdemo</DB>
<MetaData>E:\files\dql\demo.nlq</MetaData>
</NLQ>
</NLQList>
<DefaultRaqsoftConfig>D:\raqsoft\report\config\raqsoftConfig.xml</DefaultRaqsoftConfig>
</Config>
参数说明:
1) NLQList NLQ列表。
2) NLQ 可以配置多个,多个时添加多条< NLQ />。
3) DB DQL数据源名称,数据源在raqsoftConfig.xml中配置。
4) MetaData 词典文件.nlq,由汉语查询设计器生成。
5) RaqsoftConfig 配置文件,如前面的raqsoftConfig.xml。
6) DefaultRaqsoftConfig 缺省配置文件。NLQ下有RaqsoftConfig配置时,以NLQ下的为准,未配置时,则使用DefaultRaqsoftConfig。
注意:MetaData、RaqsoftConfig和DefaultRaqsoftConfig均支持类路径和绝对路径。
(三) NLQ JDBC的连接方法
驱动 — com.nlq.datalogic.jdbc.NLQDriver
URL — jdbc:datalogic:nlq://?nlq=[]
URL参数说明:
nlq:配置文件nlqConfig.xml中NLQ结点的name。
(四) 在java中调用NLQ接口
public class QueryNlq{
public static void main(String[] args) throws Exception {
//建立连接
Class.forName("com.nlq.datalogic.jdbc.NLQDriver");
Connection nlqCon= DriverManager.getConnection("jdbc:datalogic:nlq://?nlq=nlq1");
//用【query 汉语语句】的方式做自然语言查询
ResultSet rs = nlqCon.createStatement().executeQuery("query 人口8万至1000万的城市");
/*rs里得到多个结果,每个JSON格式的结果都包含一个MQL语句
其中一个JSON串是{mql:"select 人口 as 人口,城市编码,城市名称,省份 from CITY where ((人口>=8*10000) AND (人口<=1000*10000))",on:null,from:[{table:"城市", field:[{name:"人口", dim:null,select:true,sum:null,where:"人口 8 万 至 1000 万之间"},{name:"城市编码", dim:"CITY",select:true,sum:null,where:null},{name:"城市名称", dim:null,select:true,sum:null,where:null},{name:"省份", dim:"Province",select:true,sum:null,where:null}],by:null}],error:""}
JSON串的详细说明参考汉语查询的结果说明
*/
…….
//拆解JSON串,获取MQL语句,nlq jdbc执行MQL语句就能查得数据。如下执行第一个结果的MQL语句,获得最终数据的结果集rs2:
String mql = "select 人口 as 人口,城市编码,城市名称,省份 from CITY where ((人口>=8*10000) AND (人口<=1000*10000))";
ResultSet rs2 = nlqCon.createStatement().executeQuery(mql);
//关闭NLQ JDBC连接
nlqCon.close();
}
…….
}
}