我正在使用 OpenSearch Dashboard 来查找特定日志。我需要使用查询 DSL 过滤它们以获得以下结果:
“sText”:“.*任务开始”或“sText”:“.*任务完成”
我可以使用“查询正则表达式”过滤一个值
{
"query": {
"regexp":{
"sText":".*task finished"
}
}
}
或者使用“应该”来获取 2 个特定值之一:
{
"query": {
"bool":{
"should":[
{
"match":{
"sText":"XYDB task finished"
}
},
{
"match":{
"sText": "XYDB task started"
}
}
]
}
}
}
如何组合这些以便我可以在“应该”查询中使用正则表达式?
我尝试过:
{
"query": {
"bool": {
"should": [
{
"match": {
"regexp":{
"sText": ".*task started"
}
}
},
{
"match": {
"regexp":{
"sText": ".*task finished"
}
}
}
]
}
}
}
还有:
{
"query": {
"regexp":
"bool": {
"should": [
{
"match": {
{
"sTask": ".*task started"
}
},
{
"match": {
"sTask": ".*task finished"
}
}
]
}
}
}
}
我也尝试使用“通配符”而不是“正则表达式”,但结果是相同的。
所以我终于找到了答案。 问题是我将“match”与“regexp”结合使用,但应该使用“regexp”而不是“match”,因为它会查找精确匹配。
过滤器应如下所示:
{
"query": {
"bool": {
"should": [
{
"regexp":{
"sText": ".*task started"
}
},
{
"regexp":{
"sText": ".*task finished"
}
}
]
}
}
}