我在测试索引中制作了一个自定义分析器:
PUT test
{
"settings": {
"analysis": {
"filter": {
"myFilter": {
"type": "pattern_capture",
"patterns": ["\\d+(,\\d+)*(\\.\\d+)?[%$€£¥]?"],
"preserve_original": 1
}
},
"analyzer": {
"myAnalyzer": {
"type": "custom",
"tokenizer": "myTokenizer",
"filters":["myFilter"]
}
},
"tokenizer": {
"myTokenizer":{
"type":"pattern",
"pattern":"([^\\p{N}\\p{L}%$€£¥@#'\\-&]+)|((?<=[^\\p{L}])['\\-&]|^['\\-&]|['\\-&](?=[^\\p{L}])|['\\-&]$)|((?<=[^\\p{N}])[$€£¥%]|^[$€£¥%]|(?<=[$€£¥%])(?=\\d))"
}
}
}
}
}
它应该吐出像123,234.56 $这样的数字作为单个标记 但是当提供这样的数字时,它会吐出3个令牌123 234 56 $
测试查询失败的示例:
GET test/Stam/_termvector?pretty=true
{
doc:{
"Stam" : {
"fld" : "John Doe",
"txt": "100,234.54%"
}
},
"per_field_analyzer" : {
"Stam.txt": "myAnalyzer"
},
"fields" : ["Stam.txt"],
"offsets":true,
"positions":false,
"payloads":false,
"term_statistics":false,
"field_statistics":false
}
}
任何人都可以找出原因吗?
绝对适用于所有其他情况','和'。'是分隔符,这就是为什么我为此目的添加了一个过滤器,但遗憾的是它不起作用。
提前致谢。
答案 0 :(得分:0)
答案很简单,令牌过滤器无法通过设计组合令牌。它应该通过char过滤器完成,即使在tokenizer开始拆分为令牌之前,也会应用于char流。 我只需要确保自定义标记生成器不会拆分我的标记。