我正在为弹性搜索中的重要术语聚合编写一个排除过滤器。我想从结果中排除与模式(任意2个字母)(任意6个数字)匹配的任何术语,即AB123456
我尝试过:
[a-zA-Z]{2}&<0-9>{6}
但是当我尝试更新可视化效果时,Kibana给出了错误
[x_content_parse_exception] [1:72] [significant_terms] exclude doesn't support values of type: START_OBJECT
此JavaScript似乎可以满足我的要求:
([a-zA-Z]{2}\d{6})
但我正在努力将其翻译为Lucene
答案 0 :(得分:1)
这里不需要“&”,它会尝试查找同时匹配[az] {2}和<0-9> {2}的令牌比一个接一个。
这是基于我对问题的理解的解决方案。它将排除包含2个字母和6个数字的文档:
PUT /stackoverflowtest/_doc/1
{
"value" : "AB123456"
}
PUT /stackoverflowtest/_doc/2
{
"value" : "AB1234Z"
}
PUT /stackoverflowtest/_doc/3
{
"value" : "This document has one at the end: AB123456"
}
POST /stackoverflowtest/_search
{
"query": {
"bool": {
"must_not": [
{
"regexp": {
"value": "[a-z]{2}<0-9>{6}"
}
}
]
}
}
}
这仅返回一个文档,一个值为“ AB1234Z”,不包含2个字母,后跟6个数字表示任何令牌。
答案 1 :(得分:1)
这是我用来获取所需结果的完整JSON。我正在使用“重要术语”聚合器从支持通知单的注释中提取关键字。我需要设置一个background_filter,然后从原始问题中排除文本模式。
文档结构:
摘要:错误消息的名称
注意:错误的详细信息,包括我不关心的用户名,例如AB123456。
"significant_terms": {
"field": "notes",
"size": 10,
"background_filter": {
"query_string": {
"query": "summary: ErrorMessage1* OR ErrorMessage2*",
"analyze_wildcard": "true"
}
},
"exclude": "[a-zA-Z]{2}[0-9]{6}"
}