0

我正在使用 Esper + Mule,我正在尝试定义一个 POJO 和一个事件,但是在阅读了 Espero 的文档之后,我还没有找到我真正需要的东西。

我的事件由 POJO 表示,具有如下属性:

List<String> Words;

我想做的是使用关键字 IN 将其与另一个单词列表进行比较,因此模式如下所示:

... Words in ('word1', 'word2', 'word3) ...

但我得到这个错误:

Collection or array comparison is not allowed for the IN, ANY, SOME or ALL keywords

有什么办法可以做到这一点?

非常感谢

4

2 回答 2

1

一种方法是创建一个方法来做你想做的事,用 esper 注册那个方法,然后从你的 EPL 语句中引用那个方法:

创建助手类(对于这个例子,我使用 EsperUtils.java):

package my.package;

class EsperUtils {
  public static boolean contains(List<String> list1, List<String> list2) {

    // Check for list1 and list2 to contain same word
    for (String s1 : list1) {
      for (String s2 : list2) {
        if (s1.equals(s2)) return true;
      }
    }
    return false;
  }
}

在 aem.esper.config.xml 中向 esper 注册方法:

<plugin-singlerow-function name="contains" function-class="my.package.EsperUtils" function-method="contains" />

在您的 EPL 中使用辅助方法:

select * from myEvent where contains(Words,AnotherListOfWords)

您还可以将辅助方法添加到您的事件 POJO,而不是辅助类。

于 2013-08-28T17:20:03.143 回答
0

您想查看枚举方法,请参阅http://esper.codehaus.org/esper-4.9.0/doc/reference/en-US/html_single/index.html#enumerationreference 似乎“相交”和“ countOf" 组合将适合。

于 2013-08-26T11:59:12.780 回答