Regex 在Solr中使用正则表达式将子字符串从字段保存到copyfield

Regex 在Solr中使用正则表达式将子字符串从字段保存到copyfield,regex,solr,Regex,Solr,我正在使用导入处理程序从mysql表导入数据。我有一列msg,类型为text。使用正则表达式,我必须将子字符串保存在副本字段中 msg: 94eb2c0cb17ef354bb052c57f40c\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding pnr:986|0978325 预期Solr结果: { "msg_body": "94eb2c0cb17ef354bb052c57f40c\\r\\n

我正在使用导入处理程序从mysql表导入数据。我有一列
msg
,类型为
text
。使用正则表达式,我必须将子字符串保存在副本字段中

msg: 94eb2c0cb17ef354bb052c57f40c\r\nContent-Type: text/plain; charset=UTF-8\r\nContent-Transfer-Encoding pnr:986|0978325
预期Solr结果:

{
    "msg_body": "94eb2c0cb17ef354bb052c57f40c\\r\\nContent-Type: text/plain; charset=UTF-8\\r\\nContent-Transfer-Encoding pnr:986-0978325",
    "pnr_number": "pnr:986-0978325"

}
我的正则表达式:

(pnr|(P|p)[ _.:,!"'-/$](N|n)[ _.:,!"'-/$](R|r))+[ _.:,!"'-/$]+[0-9]{3}[ _.:,!"'-/$]+[0-9]{7}

请帮助我,因为我是solr的新手,您需要为pnr\U编号定义一个自定义字段。 使用copyField将msg_正文复制到pnr_编号 在自定义字段定义中,使用

<filter class="solr.PatternCaptureGroupFilterFactory" pattern="regex goes here" preserve_original="false"/>


由于您使用的是数据导入处理程序,因此有3个选项:

  • 在DIH定义中使用
  • 使用(在solrconfig.xml中)
  • 在analyzer链中使用正则表达式过滤器

  • 使用前两个选项,正则表达式将在字段实际索引之前提取模式。在最后一个选项中,存储的表示形式(如果存储字段)将包含原始的完整字符串,但索引(可搜索)表示形式将包含正则表达式匹配。

    I您似乎对正则表达式也不熟悉。你的正则表达式有几个问题。试着在众多在线正则表达式测试员中的一个上测试它。