是否可以创建一个映射分析器,根据字符数将字符串拆分成更小的部分?
例如,假设我有一个字符串:“ABCD1E2F34”。这是一些由多个较小的代码构成的令牌,我想再次将其分解为这些代码。
如果我确定知道: - 第一个代码总是4个字母(“ABCD”) - 第二个是3个字母(“1E2”) - 第三个是1个字母(“F”) - 第四个是2个字母(“34”)
我是否可以为将要映射字符串的字段创建映射分析器?如果我将字段“bigCode”设置为值“ABCD1E2F34”,我将能够像这样访问它:
bigCode.full ("ABCD1E2F34")
bigCode.first ("ABCD")
bigCode.second ("1E2")
...
非常感谢!
答案 0 :(得分: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
}
]
}
您也可以查看文档:{{3}}