在每个文档上测试多个正则表达式

时间:2014-06-24 13:58:48

标签: pentaho kettle

我从mongodb集合中获取所有文档(数百万),并且我在postgreSQL中有很多正则表达式。 我想测试每个正则表达式,直到文档中包含多个字段的匹配为止。

你知道怎么做吗?

我尝试了Filter Row步骤,但我无法想象如何从postgreSQL循环所有正则表达式。

1 个答案:

答案 0 :(得分:2)

您可以使用加入行(笛卡尔积)组件来解决您的问题。您的一个输入必须在文档中读取,另一个必须在正则表达式中读取。连接组件将从这些组件创建外部产品,从而产生正则表达式和文档的每种可能组合。您必须将此流输入过滤器行组件并将结果发送到某个输出。

以下转换将模仿这种方法(它从CSV文件读取,但从postgreSQL或MungoDB读取它不会有任何区别):

transformation

"文件"的输入数据配置如下:

csv input for docs

"正则表达式"的输入数据配置如下:

csv input for regular expressions

Join Rows 根本不需要配置,因为我们将 NOT 提供连接条件,从而使其成为一个完整的外连接。

过滤器组件中,您必须使用DOC_TEXTREGEX_TEXT字段来执行REGEXP运算符的检查。

enter image description here

对于此文档输入

DOC_ID;DOC_TEXT
1;DFGBGGG
2;UHLLJAL
3;JJJJHHH
4;FGAKKBL

和这个正则表达式输入

REGEX_ID;REGEX_TEXT
1;.*A.*
2;.*B.*

转换将输出以下结果:

DOC_ID;DOC_TEXT;REGEX_ID;REGEX_TEXT
1;DFGBGGG;2;.*B.*
2;UHLLJAL;1;.*A.*
4;FGAKKBL;1;.*A.*
4;FGAKKBL;2;.*B.*