润乾 NLQ 课程 - 3 条件过滤
3. 条件过滤
3.1. 用字段条件过滤表
查询:年龄 39 雇员
意图:用条件过滤出满足要求的记录
过滤条件包含字段词“年龄”和常数39,年龄已经定义,可以直接搜索。
注意:过滤条件的基本组成部分是:
字段词(年龄)+ 常数( 39 )
3.2. 查询时要被替换的词
查询:已售罄的商品
意图:使用业务人员常用的说法
“已售罄”这个条件不知道查什么字段,也没有常数
可以定义宏词:“已售罄”,宏词将被替换成的串“库存量是 0”。查询时,宏词“已售罄” 先被替换为“库存量是 0”再查询,查询变为“库存量是 0 的商品”。
商品数据在 PRODUCT 表中,要先导入元数据的这个表,修改宏字段、增加实体等。
3.3. 过滤条件中的常数带有单位、
查询:年龄 39 岁的雇员
意图:过滤条件中,字段词“年龄” 对应的常数“39 岁”带有单位“岁”
需要在量纲定义类型“岁”,同一类型的量纲,可以有多个量纲单位:重量 - 克、千克、吨。


系数是量纲单位和主单位之间的换算关系,比如:重量的主单位是克(系数是 1),千克的系数就是 1000。
一个量纲单位可以有多个量词,比如:千克、公斤。
定义好量纲后,可以在表中维护宏字段的量纲单位:

3.4. 过滤条件中有比较计算
查询:金额大于 10 的订单
意图:查询条件中有比较计算
定义“大于”比较词:

比较词的表达式?1>?2 中, ?1 表示条件中的字段词金额, ?2 则表示与比较词对应的常数 10。
还要设置词的位置在左边,比较词左边是字段词?1。相应的常数?2 则在比较词右边。
同一个比较计算可以有多个比较词,如“大于, 超过, 高于”。
3.5. 过滤条件中有多个比较计算
查询:金额大于 10 且小于 100 的订单
意图:条件中有两个比较计算 - 大于、小于
“且”用来连接两个比较计算,要定义成连词“且, 而且, 并且”,表示两个比较计算的逻辑关系是“和”(and):

连词一般还有一个 “或, 和, 或者”表示逻辑关系“或”(or)。
3.6. 省略字段词的过滤
查询:2025 年 5 月 21 日的订单
意图:条件中没有字段词“签订日期”,只有常数 2025 年 5 月 21 日
要为实体“订单”关联的字段簇“订单”:


查询时,系统会自动到实体“订单”关联的字段簇“订单”中找日期类型字段。字段簇“订单”中有多个日期型字段,会自动找到第一个日期字段,也就是“签订日期”作为条件。
注意:表的缺省簇为其第一个实体的关联簇,未设置实体则是其上第一个字段簇,未设置字段簇则以全表作为关联簇,并以主键为标记字段。
查询:男雇员
查询:北京雇员
意图:性别是男的雇员、籍贯城市是北京的雇员
常数“男”、“北京”都是字符串,不能都找实体“雇员”关联的字段簇中的第一个字符串类型字段了。
性别、城市都是维词,对应 DQL 中的维度。可以定义维词的常数词,来实现省略维词的查询。
维词对应 DQL 中的维度,导入元数据的时候会全部导入,只要把维词改成中文即可:

真实值是指数据库表中真实存储的值,比如字符串”男”。同一个真实值可能对应多个常数词,需要分别列出,不能用逗号分隔。
注意:字段名要到实体“雇员”关联的字段簇中去找,要先定义好实体关联的字段簇,才能用常数词做条件查询。
注意:常数和常数词的区别,常数词对应确定的维词、维度,常数则不对应。
查询:北京雇员
城市维词对应城市表,真实值比较多,可以批量复制粘贴,生成常数词:

还可以定义常数词对应的真实值是集合:

重点:过滤条件由“字段词 + 常数” 变成只有“常数词”,而常数词可以通过维度自动找到字段词。
例如:常数词“北京”-> 维词“城市”-> 实体词“雇员”-> 关联簇“雇员”-> 维度对应的宏字段“籍贯城市”。
3.7. 用动词过滤
查询:生于 1985 年的雇员
意图:“生日是 1985 年的雇员”,想用动词“生于”来写
需要定义 EMPLOYEE 表的动词。动词要关联字段簇,先定义字段簇“生日年龄”,包含宏字段生日、年龄:

再定义动词“生于”,右簇选择字段簇“生日年龄”。动词的右簇,意思是“动词右边的字段簇”,“生于”的右簇是字段簇“生日年龄”。
动词右侧的常数“1985 年”是日期型,会自动去“生日年龄”中找日期型字段“生日”

类似的,还可以定义动词“出生”,查询时常数在动词左边,比如“1985 年出生”,要定义左簇“生日年龄”。

3.8. 用动词 + 常数词过滤
查询:发往北京的订单
意图:“收货城市是北京的订单”想用动词“发往”来写
可以给 ORDERS 表定义动词“发往”:

动词的右簇,意思是“动词右边的字段簇”。
“发往”的右簇是字段簇“收货”,动词右侧的常数词“北京”就会去“收货”中找维词“城市”对应的字段词“城市”。
查询等效为:收货城市是北京的订单
查询:上海发往北京的订单
意图:发货城市是上海 且 收货城市是北京的订单
动词“发往”定义左簇,意思是“动词左边的字段簇”,“发往”左边也可以写常数词“上海”:

动词“发往”的左簇定义为字段簇“发货”,动词右侧的常数词“上海”就会去“发货”中找字段词“城市”。
动词名称可以有多个,用英文逗号分开,如:“发往, 发到”。
3.9. 查不在物理表中的字段 - 用外键簇实现
查询:签单日期,金额,客户 客户名称 联系人 联系人职务
意图:查订单表的签单日期、金额,以及对应客户表的字段
ORDERS 中,定义宏字段“客户编号”为外键簇,指向 CUSTOMER 表。这时候,CUSTOMER 表关联的字段簇“客户信息”可以看做 ORDERS 表的簇,以外键“客户编号”命名。无需在 ORDERS 表中增加 CUSTOMER 表的字段:

在簇词中定义“客户”,这个簇词对应外键簇,所以是外键词:

查询时,簇词“客户”后面的客户名称、联系人、联系人职务,系统自动找外键词“客户”指向的 CUSTOMER 表关联的字段簇“客户信息”,可以找到需要的字段。
类似的,还可以定义外键词:销售、供应商等。
