0

文字数に基づいて文字列を小さな部分に分割するためのマッピング アナライザーを作成することは可能ですか?

たとえば、「ABCD1E2F34」という文字列があるとします。これは、複数の小さなコードから構築されたトークンであり、それらのコードにもう一度分解したいと思います。

- 最初のコードは常に 4 文字 ("ABCD") - 2 番目は 3 文字 ("1E2") - 3 番目は 1 文字 ("F") - 4 番目は 2 文字 ("34")

このように文字列をマッピングするフィールドのマッピング アナライザーを作成できますか? フィールド「bigCode」に値「ABCD1E2F34」を設定すると、次のようにアクセスできます。

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

どうもありがとう!

4

1 に答える 1

0

パターントークナイザー についてどう思われますか? 文字列をトークンに分割する正規表現を作成します(?<=(^\\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

于 2016-09-01T11:13:54.227 に答える