0

是否可以创建一个映射分析器,用于根据字符数将字符串拆分为更小的部分?

例如,假设我有一个字符串:“ABCD1E2F34”。这是由多个较小的代码构成的一些令牌,我想再次将其分解为这些代码。

如果我确定: - 第一个代码总是 4 个字母(“ABCD”) - 第二个是 3 个字母(“1E2”) - 第三个是 1 个字母(“F”) - 第四个是 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 回答