业务配置-分词匹配

业务配置-分词匹配

使用场景

软件系统部署使用时通常需要大量的配置工作,本文针对的设备与测量点,测量点与监控摄像头等自动配置工作提出一些自己的想法。

场景分析

本文以设备和测量点匹配为例,一般情况下设备会有多个采集点信号,我们将设备作为一张表,采集点作为一张表,两张表的关系就会是1:N的关系。若想建立设备和采集点的关系,首先需要人为在一定程度建立两者的匹配规则,我们默认使用设备名称【equipmentName】或者别名【remark】,与采集点名称【ParmName】进行关系匹配。但最初命名仍需人为配置,对于1:N的数据级,我们将采用在设备建立模糊对于规则,即配置人员需在设备表的【equipmentName】和【remark】字段属性中加入与采集点名可模糊匹配的关键字,如:
点名称:【ParmName】进水1#泵瞬时流量
设备:【equipmentName】1#进水泵 or 【remark】1#进水泵
ps:看不懂没事,技术方面能看懂就行

解决方案

本次提出使用场景的解决方案分两种,一种使用Sqlserver的全文索引,第二种使用ES分词索引进行。第一种方式是直接在sqlsever的基础上建立全文索引,实现简单,但执行速度慢;第二种方式是通过ES分词器,需嵌入ES环境,执行速度快
一、Sqlserver建立全文索引
1、开启数据库索引功能
具体参考博客《Sqlserver 2008下添加全文索引,增加查询速度》
链接解释很详细,本文不再赘述,全文索引的表需选择设备表的【equipmentName】和【remark】字段,为啥不在测量点边建立全文索引,是因为每个采集点都需要匹配设备id,并且关系描述属性需加在设备表中,而且后续在测量点配置界面也可以使用该接口提示用户进行配置,因此本文建议在测量点属性中加入设备id【equipmentId】,通过遍历测量点表(避免人为配置过正确的关系,遍历时equipmentId应为null),遍历过程中每个点根据设备【equipmentName】或者【remark】字段进行匹配,找到匹配度最高的设备记录,将记录id更新到测量点的【equipmentId】
2、系统建立查询语句
在mapper文件中建立新的查询
具体参考

SELECT [id]
      ,[equipmentName]
      ,[remark]
  FROM [NKYG].[dbo].[TB_EM_EquipmentCard]
  inner join freetexttable([NKYG].[dbo].[TB_EM_EquipmentCard], ([equipmentName],remark),'气浮池 任务',1) as k
  on [NKYG].[dbo].[TB_EM_EquipmentCard].id = k.[key] 
  order by k.RANK DESC

测试结果 在这里插入图片描述

其中([equipmentName],remark),‘气浮池 任务’,1) 第一参数为匹配字段,第二个参数为匹配内容(测量点名称),第三个参数为范围值个数; order by k.RANK DESC,表示按匹配度倒序
3、service层逻辑代码
具体参考第一步思想
ps:为提升执行速度,测量点先从库中统一查询到后台存入List中,遍历List,若在SSM框架使用AOP连接不同生产库,需注意每次模糊查询不能切数据,否则每次查询都要连接再断开数据源
二、ES建立分词
实现思路与Sqlserver方法一致,主要区别在于不使用Sqlserver全文索引而使用ES分词,由于ES分词对中文分词不友好,建议ES集成IK分词,具体使用参考博客《ElasticSearch笔记整理(三):Java API使用与ES中文分词》中ES中文分词之集成IK分词部分

本文提出的方案只是进行了基础验证,后续会在SSM框架和Dubbo框架下开发调试,后续会继续更新,时间匆忙,先写到这,希望大家谅解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值