2017-02-28 34 views
0

我使用導入處理程序從mysql表中導入數據。我有一列msg,類型爲text。使用正則表達式,我必須在副本字段中保存子字符串。使用正則表達式在Solr保存從字段到副本字段的子字段

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

+0

我似乎你是新來的正則表達式了。你的正則表達式有幾個問題。嘗試在許多在線正則表達式測試器之一上進行測試。 – Bohemian

回答

1

你需要定義一個自定義字段爲pnr_number。 使用copyField複製msg_body到pnr_number 在自定義字段定義,使用

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

由於您使用數據導入處理程序,你有3種選擇:

  1. 使用在DIH定義一個Regex Transformer
  2. 使用RegexReplaceProcessorFactory Update Request Processor(在solrconfig.xml中)。
  3. 使用正則表達式過濾器在分析儀鏈

隨着前兩個選項,正則表達式將提取圖案之前的字段實際上索引。在最後一個選項中,存儲的表示(如果存儲該字段)將包含原始完整字符串,但索引(可搜索)表示將包含正則表達式匹配。