2015-09-01 42 views
0

我使用pattern_capture過濾器來保存所有的縮寫避免使用首字母縮略詞嗎?

PUT test_index/_settings 
{ 
    "index.analysis.filter": { 
    "acronym_en_EN": { 
     "type": "pattern_capture", 
     "patterns": [ 
     "(?:[a-zA-Z]\\.)+", 
     "((?:[a-zA-Z]\\.)+[a-zA-Z])", 
     "((?:[a-zA-Z]\\.)+[s]$)", 
     "((?:[a-zA-Z]\\.)+[s][\\.]$)" 
     ], 
     "preserve_original": true 
    } 
    } 
} 

但是我注意到,隨着ss.結束首字母縮寫爲梗有一個詞幹過濾器也連接到分析儀。以上過濾器中用於處理s的正則表達式也不起作用。

我使用測試輸出這

GET test_index/_analyze?tokenizer=standard&filters=lowercase,acronym_en_EN,apostrophe,porter_stemmer_en_EN&text=u.s.a. u.s. s.w.a.t u.t. 

這給了我

{ 
    "tokens": [ 
     { 
     "token": "u.s.a", 
     "start_offset": 0, 
     "end_offset": 5, 
     "type": "<ALPHANUM>", 
     "position": 1 
     }, 
     { 
     "token": "u.", 
     "start_offset": 7, 
     "end_offset": 10, 
     "type": "<ALPHANUM>", 
     "position": 2 
     }, 
     { 
     "token": "u.", 
     "start_offset": 7, 
     "end_offset": 10, 
     "type": "<ALPHANUM>", 
     "position": 2 
     }, 
     { 
     "token": "s.w.a.t", 
     "start_offset": 12, 
     "end_offset": 19, 
     "type": "<ALPHANUM>", 
     "position": 3 
     }, 
     { 
     "token": "u.t", 
     "start_offset": 20, 
     "end_offset": 23, 
     "type": "<ALPHANUM>", 
     "position": 4 
     } 
    ] 
} 

有什麼辦法,我可以保持與s,從而結束了首字母縮寫爲u.s.u.s我不明白u.

回答

1

我認爲這不支持開箱即用。我相信這樣做的方法是教pattern_capture過濾器如何將其捕獲標記爲keyword令牌和keyword_marker過濾器。

老實說,你可能會用兩個pattern_replace令牌過濾器一起破解一些東西 - 一個在stemmer的兩側。只需在縮寫詞前加上$或其他東西,然後在另一側撕掉它。

+0

添加'$'似乎是一個好主意。但是與'pattern_replace'有關的大多數例子都是用空字符串替換匹配的詞。有沒有一種方法可以用相同的匹配項替換它? –

+0

捕獲組應該工作ala [appendReplacement](http://docs.oracle.com/javase/6/docs/api/java/util/regex/Matcher.html#appendReplacement(java.lang.StringBuffer,%20java.lang 。串))。 – Nik

+0

我使用'#'作爲這些縮寫詞的分隔符。我認爲它應該工作。感謝您的建議。 –

相關問題