2017-08-30 40 views
2

我試圖創建一個自定義tokeniser爲elasticsearch解析鳴叫自定義tokeniser表達令牌:定期對elasticsearch

["This", "is", "a", "test!!", "@test_twitter", "#testForLife"] 

要做到這一點我想出了下面的正則表達式,我在regex101測試:

(\w*\S*[\S*]) 

它似乎工作得很好。

的問題是,我需要爲我分析一個Java正則表達式,所以我用regex101轉換和我有以下幾點:

(\\w*\\S*[\\S*]) 

我測試了以下網站http://www.regexplanet.com/advanced/java/index.html上,但它似乎沒有抓什麼,我試圖在elasticsearch:

PUT my_index 
{ "settings" : { 
    "index" : { 
     "number_of_shards" : 1, 
     "number_of_replicas" : 0 
    }, 
    "analysis": { 
     "analyzer": { 
     "tweeter_analyser_nlp" :{ 
      "type" : "custom", 
      "tokenizer" : "tweeter_tokenizer", 
      "filter": ["lowercase"] 
     } 
     }, 
     "tokenizer": { 
     "tweeter_tokenizer": { 
      "type": "pattern", 
      "pattern": "(\\w*\\S*[\\S*])" 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "tweet": { 
     "properties": { 
     "text": { 
      "type": "text", 
      "term_vector": "yes", 
      "analyzer" : "tweeter_analyser_nlp" 
     }, 
     "fullname": { 
      "type": "text", 
      "term_vector": "with_positions_offsets_payloads", 
      "analyzer" : "tweeter_analyser_nlp" 
     } 
     } 
    } 
    } 
} 

而且它沒有捕捉到任何還有:

GET my_index/_analyze 
{ 
    "analyzer": "tweeter_analyser_nlp", 
    "text": "A test" 
} 

它返回我:

{ 
    "tokens": [ 
    { 
     "token": " ", 
     "start_offset": 1, 
     "end_offset": 2, 
     "type": "word", 
     "position": 0 
    } 
    ] 
} 

是我在Java中的正則表達式錯的,如果是這將是優秀的Java正則表達式?

還是問題來自其他地方?

+0

看來你只需要'「\\ S +」'相匹配的1個或多個非空白符號塊。 –

+0

我希望你複製原來的RegEx,而不是「Java版本」,因爲這是** RegexPlanet **等待...... –

+0

@UsagiMiyamoto好了,你解決了我關於** RegexPlanet **問題的問題,它與「Java版本」,但彈性搜索仍然不正確標記 – mel

回答

1

使用空白標記生成器類型:

"tokenizer": { 
    "tweeter_tokenizer": { 
     "type": "whitespace" 
    } 
    }