我正在努力将Splunk查询转换为Elasticsearch DSL。 我想检查日志中的URL是否包含以下内容:
"script>" OR "UNION ALL SELECT"
我认为很公平,去了doc,并且:
{
"regexp": {
"http.url": "script>"
}
}
Elasticsearch(2.3)回复:
" root_cause":[ { "原因":"无法解析搜索源。未知的搜索元素[regexp]", "输入":" search_parse_exception", " line":2,
有人可以告诉我这些问题吗?
答案 0 :(得分:2)
在开始使用文档时,这是一个非常直接的错误。在文档中,我们通常只显示原始查询(及其参数)。查询是复合查询或叶查询。 regexp
是叶子查询的示例。
但是,实际发送查询还不够。您为任何查询错过了DSL的简单包装器部分:
{
"query": {
"regexp": {
"http.url": "script>"
}
}
}
要使用复合查询,最好的方法是使用bool
compound query。
它有must
,must_not
,should
或filter
,每个都接受一系列查询(或过滤器,这些只是无分数,可缓存的查询)。 should
是类似OR
的方面,但是当您在其旁边添加must
时,请阅读有关其行为方式的文档。要点是should
本身与OR
完全相同(如下所示),但如果将其与must
结合使用,那么在不使用"minimum_should_match": 1
的情况下它就完全可选
{
"query": {
"bool": {
"should": [
{
"term": {
"http.url": "script>"
}
},
{
"term": {
"http.url": "UNION ALL SELECT"
}
}
]
}
}
}