python - Elasticsearch - 如何匹配字符串中的数字范围
问题描述
我想编写一个查询来查找包含名称和数字 +/- 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 编写的。
谢谢
解决方案
您可以应用预处理要查询的范围:
- 如果您的字段
event
是文本,您的查询字符串将自动标记化并使用每个数字标记进行查询:
"match": {
"event": "37 38 39 40 41 42 43 44 45"
}
- 如果您的字段
event
是关键字,则使用术语查询:
"terms": {
"event": ["37", "38", "39", "40", "41", "42", "43", "44", "45"]
}
推荐阅读
- java - 保留连字符,除非在带有正则表达式的单词末尾
- c# - C# - data.table:将单列拆分为多列
- javascript - 没有正文的nodejs函数
- python - 列表列表 = TypeError:不可散列的类型:'list'
- azure-active-directory - 使用具有应用程序权限的 Microsoft Graph API 时,租户没有 SPO 许可证
- python - Beautifulsoup类值提取python
- c# - 当您使用带有约束的通用参数时,C# 是否会生成单独的方法?
- docker - 无法连接到第二个 docker 容器 - 端口错误
- listview - 在应用程序开始时,在颤动中滚动到列表视图的最后一个元素
- python-3.x - 每 x 秒将一个值保存到列表中