当前位置: 首页 > 知识库问答 >
问题:

让知识持续流口水

冯良才
2023-03-14

目标:我想坚持/重复使用一次为射击规则创建的流口水知识会话。

问题:我想使用包含10000多条规则的决策表创建一个知识会话。创建此会话并每次都将其关闭是不可行的,我希望在创建会话后存储该会话,该会话可以通过密钥识别,并反复使用此会话。我已经尝试过drools的jpa知识服务和kie的编组,但这两种方法都不起作用。它需要一个KnowledgeBase实例,而每次使用drools表创建一个新的KnowledgeBase实例对于我的用例来说都是不可取的,因为这需要花费相当长的时间。如何存储创建的知识库的id,并在以后使用它检索该库?或者,如果没有kbase的这些信息,我如何保持我的K会话?

编辑:我们有一组规则,我们需要将当前数据与旧数据集进行比较,以确定新数据的参数值。
旧数据集很大,每月只更改一次。目前,我们处理这一问题的方法是为旧数据中的每一行制定一个规则。加载速度很慢,我们必须为请求执行一次,并为当前数据集中的每个条目迭代触发规则。您给出的解决方案有效。所以现在,我不必一遍又一遍地加载,这解决了我的目的。但是如果我开始考虑它,它似乎不是最好的解决方案。
我正在尝试的另一种方法是,将旧数据集作为事实插入会话中,然后持久化会话。下次加载会话时,我将拥有可用的事实,我可以用它来触发我的规则。您认为这种方法更好吗?还有其他建议吗?

共有1个答案

花稳
2023-03-14

快速启动的一个好方法是将KieBase保存到一个文件中,并在需要时读取它。

    KieBase kieBase = kieContainer.getKieBase();
    FileOutputStream fos1 = new FileOutputStream( KBPATH );
    ObjectOutputStream oos1 = new ObjectOutputStream( fos1 );
    oos1.writeObject( kieBase );
    oos1.close();
    FileInputStream fis9 = new FileInputStream( KBPATH );
    ObjectInputStream ois9 = new ObjectInputStream( fis9 );
    KieBase kieBase = (KieBase)ois9.readObject();
    KieSession kieSession = kieBase.newKieSession();

(然而,一个拥有10000多条规则的决策表似乎并不是使用Drools的正确方式。不仅编译速度可能很慢,而且插入操作的执行情况如何?)

稍后,根据您添加到问题中的简单情况,我建议插入行数据作为事实,然后使用一条规则

rule "update discount"
when
  $op: OldPerson( $oloc: location, $oage: age, $odis: discount )
  $np: NewPerson( location == $oloc, age == $oage, discount != $odis )
then
  modify( $np ){ setDiscount( $odis ) }
end

不值得保留任何东西;为新旧人员使用任何文件格式;甚至可能不值得压缩。

 类似资料:
  • apply 方法 当类或对象有一个主要用途的时候,apply方法为你提供了一个很好的语法糖。 scala> class Foo {} defined class Foo scala> object FooMaker { | def apply() = new Foo | } defined module FooMaker scala> val newFoo = FooM

  • 我正在从一个消息应用程序收集数据,我目前正在使用Flume,它每天发送大约5000万条记录 我希望使用Kafka,使用Spark Streaming从Kafka消费并将其持久化到hadoop并使用impala进行查询 我尝试的每种方法都有问题。。 方法1-将RDD另存为parquet,将外部配置单元parquet表指向parquet目录 问题是finalParquet.saveAsParquetF

  • 本文向大家介绍日常收集C#接口知识(知识全面),包括了日常收集C#接口知识(知识全面)的使用技巧和注意事项,需要的朋友参考一下 第一节 接口慨述   接口(interface)用来定义一种程序的协定。实现接口的类或者结构要与接口的定义严格一致。有了这个协定,就可以抛开编程语言的限制(理论上)。接口可以从多个基接口继承,而类或结构可以实现多个接口。接口可以包含方法、属性、事件和索引器。接口本身不提供

  • 流水线功能提供给用户统一的视图来管理应用自动发布规则,您可通过此功能来自动发布自有主机或DCE混合云环境下的应用 设置自动发布规则 进入构建项目页,选择流水线 点击右侧 development 面板中的添加一个新应用, 输入应用的名字,我们可以搜索到使用该项目的应用 点击应用的“设置发布规则”来设置自动部署规则。 根据此规则,当源码的 master 分支更新时会自动触发CI与构建,并自动发布新版本

  • 我正在尝试创建一个在Android 4.2中运行连续语音识别的服务。使用此链接中的答案(Android 4.1上的Android语音识别服务 我到底做错了什么? 相关活动代码(从活动调用的静态方法,actiityContext是调用此方法的活动): 服务代码:

  • 本文向大家介绍java字节流知识点总结,包括了java字节流知识点总结的使用技巧和注意事项,需要的朋友参考一下 在java中我们使用输入流来向一个字节序列对象中写入,使用输出流来向输出其内容。C语言中只使用一个File包处理一切文件操作,而在java中却有着60多种流类型,构成了整个流家族。看似庞大的体系结构,其实只要使用适合的方法将其分门别类,就显得清晰明了了。而我准备将其按照处理文件类型的不同