我正在使用查询字符串查询来过滤 ElasticSearch 6.5 集群中的文档。我需要查找的文档包含带有一些命令行参数的字段(带有特殊字符,包括空格和双引号)。
例如:
schtasks.exe /Create /tn "Microsoft\Office\Office Feature Updates Logon" /XML "C:\ProgramData\Microsoft\ClickToRun\{9AC08E99-230B-47e8-9721-4577B7F124EA}\Microsoft_Office_Office Feature Updates Logon.xml"
而且我不知道如何查询这个确切的字符串,而不必转义文档中描述的每个空格和其他特殊字符。
我可以通过这样的查询找到它(为方便起见,跳过了所有必要的 json 格式转义):
{
"query": {
"bool": {
"filter": [{
"query_string": {"query": "field:schtasks.exe\ \/create*"}
}]
}
}
}
尽管用户很难将输入直接传递给查询字符串参数,但它仍然有效。
我想要一种方法来忽略提供的搜索查询中的空格并按原样查询它,甚至可能不转义其他特殊字符。一种直观的解决方案是将查询用双引号括起来:
"query_string": {"query": "field:\"schtasks.exe /create*\""}
但它不起作用。
更新:我有以下映射field
:
...
"field":
{
"type": "keyword",
"normalizer": "lowercase_normalizer"
},
...