Я использую запрос строки запроса для фильтрации документов в кластере 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"
},
...