2015-09-01 1 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 
    } 
    } 
} 

Но я заметил, что аббревиатуры, которые заканчиваются s или s. являются стеблями, поскольку есть один парадигматический фильтр также прилагаются к анализатору. Регулярные выражения в вышеприведенном фильтре для обработки 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 tokens ala keyword_marker фильтр.

Честно говоря, вы могли бы, вероятно, взломать что-то вместе с двумя фильтрами токенов pattern_replace - по одному с обеих сторон стволовых. Просто похлопайте $ или что-то на лицевой стороне аббревиатур и соберите с другой стороны.

+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 .String)). – Nik

+0

Я использовал '#' в качестве разделителя для этих сокращений. Я думаю, это должно сработать. Спасибо за предложение. –