2016-08-16 5 views
1

문자열 인 경우 질풍의 (A 아포스트로피로 끝나는 는) 다음 내가 단말마의, 질풍로 토큰 화 할 것인지 등의 모든 단어를 토큰 화하고을 flurrys. 하지만 난 다음 내가elasticsearch에서 문자열을 토큰 화 하시겠습니까? Elasticsearch에서

S'sode = S, SODE, Ssode, S'sode 또는 S 아래 참조 예를 들어 구분 내 말을 사용하려는 아포스트로피 (위 같은의로 끝나는되지 않음)을 포함한 모든 특수 문자가있는 경우 -sode = S, 내 말의 구분은 단순히 잘 작동하지만 문자열 아포스트로피와의로 끝나는 경우에만 위의 경우 작동하지 않습니다 SODE, Ssode, Ssode

. 내 말 구분 기호는 이전 단어 구분 기호 필터를 사용했다

"my_word_delimiter" : { 
     "type" : "word_delimiter", 
     "preserve_original": true, 
     "catenate_all": true, 
     "split_on_case_change": true, 
     "stem_english_possessive": false 
} 

.I 아래와 같습니다, 그러나 또한 을 고려하고 난 내 토큰 화 된 문자열도 내가 사용하고 쉼표 형태소 분석기에 하나의 을하지 않으려하지만, 거기에서 나는 얻지 않았다 떠들썩하고 치다.

누구나 내가 어떻게 할 수 있는지 알려주시겠습니까? 나는 elasticsearch에 대해별로 생각하지 않습니다.

지금 케티의 대답의 도움과

아래에 주어진 내가 내 코드로 끝나는 문자열을 토큰 화하지 않는 단어 구분 기호를 구별하는 방법에에 붙어 하나의 포인트가 구분 기호 내 말과 혼합 틸
"settings": { 
    "analysis": { 
    "char_filter": { 
     "test": { 
      "type": "pattern_replace", 
      "pattern": "\\b((\\w+)'s)\\b", 
      "replacement": "$1 $2 $2s" 
     } 
    }, 
    "analyzer": { 
       "apostrophe_analyzer": { 
        "tokenizer": "whitespace", 
        "char_filter" : ["test"], 
        "filter" : [ "my_word_delimiter", "lowercase"] 
       } 
    }, 
    "filter":{ 
      "my_word_delimiter" : { 
       "type" : "word_delimiter", 
       "preserve_original": true, 
       "catenate_all": true, 
       "split_on_case_change": true, 
       "stem_english_possessive": false 
      } 
    } 
    } 

}

+1

를, 영어에 대한 소유욕 형태소 분석기를 필요로 아마 것 및 ''char ''을 제거하기 위해 [매핑 필터] (https://www.elastic.co/guide/en/elasticsearch/reference/2.1/analysis-mapping-charfilter.html) 배우. 그게 당신에게 필요한 행동인가요? –

답변

2

: 특정 예를 들어

"analysis": { 
    "char_filter": { 
    "test": { 
     "type": "pattern_replace", 
     "pattern": "\\b((\\w+)'s)\\b", 
     "replacement": "$1 $2 $2s" 
    } 
}, 
    "filter": { 
    "my_word_delimiter": { 
     "type": "word_delimiter", 
     "preserve_original": true, 
     "catenate_all": true, 
     "split_on_case_change": true, 
     "stem_english_possessive": true 
    } 
    }, 
    "analyzer": { 
    "my_analyzer": { 
     "filter": [ 
     "my_word_delimiter" 
     ], 
     "char_filter" : ["test"], 
     "type": "custom", 
     "tokenizer": "whitespace" 
    } 
    } 
} 
+0

예에서 [그룹 캡처] (regular-expressions.info/brackets.html)에 대한 참조입니다.하지만 첫 번째 경우를 잊어 버렸습니다. 그러면 내가 flurry를 입력하면 s로 tokeized가됩니다. 또한 나는 그것을 원하지 않는다. –

+0

아포스트로피로 끝나는 일부 단어를 tokeinze하고 단어 분리 문자를 사용하지 않으려면 한 가지를 말해 줄 수 있습니까? –

+0

나는이 분석기를 테스트했고, 이것은'flurry 's Ssode S-sode' :"S'sode", "S-sode", "Ssode", " flurry ", "flurry 's ", "flurrys ", "s ", "sode "'. 나에게 그것은 옳았다. 나는 그것을 테스트하는 것이 좋습니다. –

2

한가지 방법은 이것이 pattern-replace 숯 필터를 사용하여 달성된다.

예 :

put test 
{ 
    "settings": { 
     "analysis": { 
     "char_filter": { 
      "test": { 
       "type": "pattern_replace", 
       "pattern": "\\b((\\w+)'s)\\b", 
       "replacement": "$1 $2 $2s" 
      } 
     } 
     } 
    } 
} 




get test/_analyze?tokenizer=standard&char_filter=test&text=this is flurry's test 

결과 : 나는 다음과 같은 분석 제안

{ 
    "tokens": [ 
     { 
     "token": "this", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "<ALPHANUM>", 
     "position": 0 
     }, 
     { 
     "token": "is", 
     "start_offset": 5, 
     "end_offset": 7, 
     "type": "<ALPHANUM>", 
     "position": 1 
     }, 
     { 
     "token": "flurry's", 
     "start_offset": 8, 
     "end_offset": 15, 
     "type": "<ALPHANUM>", 
     "position": 2 
     }, 
     { 
     "token": "flurry", 
     "start_offset": 15, 
     "end_offset": 15, 
     "type": "<ALPHANUM>", 
     "position": 3 
     }, 
     { 
     "token": "flurrys", 
     "start_offset": 15, 
     "end_offset": 16, 
     "type": "<ALPHANUM>", 
     "position": 4 
     }, 
     { 
     "token": "test", 
     "start_offset": 17, 
     "end_offset": 21, 
     "type": "<ALPHANUM>", 
     "position": 5 
     } 
    ] 
} 
+0

많은 도움을 주신 귀하 께 감사드립니다. 편집 한 질문을 다시 볼 수있게 해주시겠습니까? 또한 "대체"가 무엇인지 설명해주십시오 : "$ 1 $ 2 $ 2s"하시겠습니까 ?? $ 1과 $ 2는 무엇입니까 –

+0

$ 1과 $ 2는 정규식 – keety

관련 문제