Solr DIH regexTransformer似乎只知道一个捕获括号组

时间:2013-02-14 04:00:43

标签: solr dataimporthandler

我使用DIH导入数据,需要解析一个字符串,捕获两个数字,然后填充type = location(接受“lat,long”坐标对)的字段。合乎逻辑的做法是:

  <field column="latLong" 
         regex="Latitude is ([-\d.]+)\s+ Longitude is ([-\d.]+)\s+" 
         replaceWith="$1,$2" />

似乎DIH只知道一个捕获组。所以永远不会使用2美元。

有没有人曾经使用regexTransformer进行多次捕获?搜索文档没有提供$ 2或$ 3的任何示例。什么是Solr的牧师?

1 个答案:

答案 0 :(得分:2)

Solr DIH不理解$2$3等等,

我刚试过这个。在DIH data-config.xml中添加了这个:

<entity name="foo" 
        transformer="RegexTransformer" 
        query="SELECT list_id FROM lists WHERE list_id = ${Lists.id}">
    <field column="firstLastNum" 
           regex="^(\d).*?(\d)$" 
           replaceWith="$1:$2" 
           sourceColName="list_id"/>
</entity>

然后在schema.xml中添加了该字段

<field name="firstLastNum" type="string" indexed="true" stored="true"/>

当我使用list_id = 390索引文档时,firstLastNum为3:0,这确实是正确的。

我怀疑问题可能是因为正确的正则表达式只匹配第一部分而不是第二部分。也许试试这个正则表达式:

regex="Latitude is ([-\d.]+)\s*Longitude is ([-\d.]+)"

另一个原因可能是latLong属于location类型且$1,$2属于字符串类型,但我不确定。