Added regular expression support in es-dsl backend
This commit is contained in:
@@ -15,6 +15,7 @@ Changes from this section will be contained in the next release.
|
||||
* sigma-similarity tool
|
||||
* LimaCharlie backend
|
||||
* Default configurations for some backends that are used if no configuration is passed.
|
||||
* Regular expression support for es-dsl backend (propagates to backends derived from this like elastalert-dsl)
|
||||
* Value modifiers:
|
||||
* startswith
|
||||
* endswith
|
||||
|
||||
@@ -212,8 +212,6 @@ class ElasticsearchDSLBackend(RulenameCommentMixin, ElasticsearchWildcardHandlin
|
||||
|
||||
def generateMapItemNode(self, node):
|
||||
key, value = node
|
||||
if type(value) not in (str, int, list, type(None)):
|
||||
raise TypeError("Map values must be strings, numbers, lists or null, not " + str(type(value)))
|
||||
if type(value) is list:
|
||||
res = {'bool': {'should': []}}
|
||||
for v in value:
|
||||
@@ -230,7 +228,7 @@ class ElasticsearchDSLBackend(RulenameCommentMixin, ElasticsearchWildcardHandlin
|
||||
elif value is None:
|
||||
key_mapped = self.fieldNameMapping(key, value)
|
||||
return { "bool": { "must_not": { "exists": { "field": key_mapped } } } }
|
||||
else:
|
||||
elif type(value) in (str, int):
|
||||
key_mapped = self.fieldNameMapping(key, value)
|
||||
if self.matchKeyword: # searches against keyowrd fields are wildcard searches, phrases otherwise
|
||||
queryType = 'wildcard'
|
||||
@@ -239,6 +237,11 @@ class ElasticsearchDSLBackend(RulenameCommentMixin, ElasticsearchWildcardHandlin
|
||||
queryType = 'match_phrase'
|
||||
value_cleaned = self.cleanValue(str(value))
|
||||
return {queryType: {key_mapped: value_cleaned}}
|
||||
elif isinstance(value, SigmaRegularExpressionModifier):
|
||||
key_mapped = self.fieldNameMapping(key, value)
|
||||
return { 'regexp': { key_mapped: str(value) } }
|
||||
else:
|
||||
raise TypeError("Map values must be strings, numbers, lists, null or regular expression, not " + str(type(value)))
|
||||
|
||||
def generateValueNode(self, node):
|
||||
return {'multi_match': {'query': node, 'fields': [], 'type': 'phrase'}}
|
||||
|
||||
Reference in New Issue
Block a user