Elasticsearch-如何匹配字符串中的数字范围

问题描述 投票:0回答:1

我想写一个查询来查找包含名称和数字+/- 5的日志事件。由于我不知道此日志事件的确切结构,因此无法在单独的int字段中提取数字。

我的查询当前看起来像这样。

    baseQuery = {
            "query": {
                    "bool": {
                    "must": [
                            {"match": {"sim_session" : "session_id"}},
                            {"match": {"event" : "putFilenameHere"}},
                            {"bool": {
                                    "should": [
                                            {"match_phrase": {"event" : "Name"}},
                                            #Search for the line in the event text
                                            {"match": {"event" : "42"}}
                                    ],
                                    "minimum_should_match" : 2
                            }}
                    ]
                    }
            }
            }

所以我可以找到包含“名称”和数字“ 42”(被视为字符串)的事件,但是我想查找包含“名称”和37或38或39或40或41的事件或42或43或44或45或46或47。还有什么更聪明的方法来实现,然后只用一个不同的数字执行相同的查询11次?]

执行此查询的脚本是用python编写的。

Thx

python elasticsearch elastic-stack
1个回答
0
投票

您可以对要查询的范围进行预处理:

  1. 如果您的字段event是文本,则将使用每个数字标记自动对查询字符串进行标记和查询:
"match": {
  "event": "37 38 39 40 41 42 43 44 45"
}
  1. 如果您的字段event是关键字,则使用条款查询:
"terms": {
  "event": ["37", "38", "39", "40", "41", "42", "43", "44", "45"]
}
© www.soinside.com 2019 - 2024. All rights reserved.