我在这样的记录中有一个字段:
{
....
"test_field": "/xyz/abc-2021abs/drf/2021ABC"
....
}
我正在创建一个分析器,以/
在pattern_capture的帮助下不忽略正斜杠()。
这是我的映射和分析器。
{
"mappings": {
"properties": {
"test_field": {
"type": "text",
"analyzer": "test_field_analyzer",
"fields": {
"exact": {
"type": "keyword"
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"test_field_analyzer": {
"tokenizer" : "pattern",
"filter" : [ "test_filter"]
}
},
"filter" : {
"test_filter" : {
"type" : "pattern_capture",
"preserve_original" : true,
"patterns" : ["(\\p{Punct}+\\p{Alnum})"]
}
}
}
}
}
当我检查生成的令牌时,正斜杠(/
)将被忽略,并且模式捕获似乎不像pattern_capture上的示例那样工作。
请让我知道我在哪里做错了。
我不确定那些类似Java的\\p
模式,但这
{
"mappings": {
"properties": {
"test_field": {
"type": "text",
"analyzer": "test_field_analyzer",
"fields": {
"exact": {
"type": "keyword"
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"test_field_analyzer": {
"tokenizer": "keyword",
"filter": [
"test_filter"
]
}
},
"filter": {
"test_filter": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"(/[a-zA-Z-_0-9]+)"
]
}
}
}
}
}
将标记测试字段为
["/xyz", "/abc-2021abs", "/drf", "/2021ABC"]
如果那是你所追求的...
编辑
有一种使用自定义模式标记器而不是pattern_capture
过滤器来实现此目的的更简单方法:
{
"mappings": {
"properties": {
"test_field": {
"type": "text",
"analyzer": "test_field_analyzer",
"fields": {
"exact": {
"type": "keyword"
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"test_field_analyzer": {
"type": "custom",
"tokenizer": "my_pattern_tokenizer"
}
},
"tokenizer": {
"my_pattern_tokenizer": {
"type": "pattern",
"pattern": "(/[a-zA-Z-_0-9]+)",
"group": 1
}
}
}
}
}
由于您正在处理路径,因此您可能会发现路径层次标记器也很有用:
{
"mappings": {
"properties": {
"test_field": {
"type": "text",
"analyzer": "test_field_analyzer",
"fields": {
"exact": {
"type": "keyword"
}
}
}
}
},
"settings": {
"analysis": {
"analyzer": {
"test_field_analyzer": {
"tokenizer": "path_hierarchy"
}
}
}
}
}
将产生
["/xyz", "/xyz/abc-2021abs", "/xyz/abc-2021abs/drf", "/xyz/abc-2021abs/drf/2021ABC"]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句