如何正确使用elasticsearch正则表达式查询?
问题描述:
我正在将Splunk查询翻译成Elasticsearch DSL。 我要检查,如果在日志中的URL中包含类似:如何正确使用elasticsearch正则表达式查询?
"script>" OR "UNION ALL SELECT"
很公平我想,去了doc和:
{
"regexp": {
"http.url": "script>"
}
}
Elasticsearch(2.3)回复:
“ROOT_CAUSE”:[{ “原因”: “无法解析搜索源未知搜索元素[正则表达式]。”, “吨ype“:”search_parse_exception“, ”line“: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"
}
}
]
}
}
}
我明白了。对困惑感到抱歉。这个查询似乎工作。如果你能告诉我如何对查询应用OR逻辑,那将是非常好的。尽管我的问题没有太明确。 – wishi
你走了。我冒昧地将'regexp'改为'term',它假设**精确的**匹配行为。 – pickypg