1

我正在使用查询字符串查询来过滤 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"
},
...
4

0 回答 0