2016-09-01 31 views
0

是否可以創建映射分析器來根據字符數將字符串拆分爲較小的部分?映射分析器用於在彈性搜索中拆分字符串

例如,假設我有一個字符串:「ABCD1E2F34」。這是由多個較小代碼構成的一些標記,我想再次將它分解爲這些代碼。

如果我知道肯定: - 第一個代碼始終是4個字母( 「ABCD」) - 其次是3個字母( 「1E2」) - 三是1個字母( 「F」) - 四是2個字母(「34」)

我可以爲映射字符串的字段創建映射分析器嗎?如果我設置字段「bigCode」有值「ABCD1E2F34」我將能夠訪問它是這樣的:

bigCode.full ("ABCD1E2F34") 
bigCode.first ("ABCD") 
bigCode.second ("1E2") 
... 

非常感謝!

回答

0

你怎麼看待Pattern tokenizer?我創建一個正則表達式來將字符串拆分爲令牌(?<=(^\\w{4}))|(?<=^\\w{4}(\\w{3}))|(?<=^\\w{4}\\w{3}(\\w{1}))|(?<=^\\w{4}\\w{3}\\w{1}(\\w{2}))。從那以後,我創建了一個分析儀這樣的:

PUT /myindex 
{ 
    "settings": { 
     "analysis": { 
      "analyzer": { 
      "codeanalyzer": { 
       "type": "pattern", 
       "pattern":"(?<=(^\\w{4}))|(?<=^\\w{4}(\\w{3}))|(?<=^\\w{4}\\w{3}(\\w{1}))|(?<=^\\w{4}\\w{3}\\w{1}(\\w{2}))" 
      } 
      } 
     } 
    } 
} 

POST /myindex/_analyze?analyzer=codeanalyzer&text=ABCD1E2F34 

,其結果是標記化數據:

{ 
    "tokens": [ 
    { 
     "token": "abcd", 
     "start_offset": 0, 
     "end_offset": 4, 
     "type": "word", 
     "position": 0 
    }, 
    { 
     "token": "1e2", 
     "start_offset": 4, 
     "end_offset": 7, 
     "type": "word", 
     "position": 1 
    }, 
    { 
     "token": "f", 
     "start_offset": 7, 
     "end_offset": 8, 
     "type": "word", 
     "position": 2 
    }, 
    { 
     "token": "34", 
     "start_offset": 8, 
     "end_offset": 10, 
     "type": "word", 
     "position": 3 
    } 
    ] 
} 

您可以查看文檔也:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-pattern-tokenizer.html