我正在将Splunk查询翻译到Elasticsearch。我想检查日志中的URL是否包含如下内容:
"script>" OR "UNION ALL SELECT"
我觉得很公平,去了文档,然后:
{
"regexp": {
"http.url": "script>"
}
}
Elasticsearch (2.3)答复:
"root_cause":[{“原因”:“未能解析搜索源。未知搜索元素regexp","type":"search_parse_exception","line":2,
有人能给我提一下这类问题吗?
发布于 2016-08-24 16:35:34
从文档开始时,这是一个非常简单的错误。在文档中,我们通常只显示原始查询(及其参数)。查询要么是复合查询,要么是叶查询。regexp
是叶查询的一个示例。
但是,这还不足以实际发送查询。对于任何查询,您都缺少DSL的一个简单包装部分:
{
"query": {
"regexp": {
"http.url": "script>"
}
}
}
要使用复合查询,最好的方法是使用复合查询。
它有must
、must_not
、should
或filter
,并且每个人都接受一个查询数组(或过滤器,这些查询只是没有记分的、可缓存的查询)。should
是它的OR
-like方面,但是当您在它旁边添加must
时,一定要阅读关于它的行为方式的文档。要点是should
本身就像一个OR
(如下面所示),但是如果将它与must
组合,那么它就成为完全可选的,而不用使用"minimum_should_match": 1
。
{
"query": {
"bool": {
"should": [
{
"term": {
"http.url": "script>"
}
},
{
"term": {
"http.url": "UNION ALL SELECT"
}
}
]
}
}
}
https://stackoverflow.com/questions/39128535
复制相似问题