AWS Запрос ElasticSearch для ключевого слова не дает ожидаемых результатов - PullRequest
1 голос
/ 22 февраля 2020

У меня есть запрос ElasticSearch, который выглядит следующим образом:

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "should": [
            {
              "wildcard": {
                "Message.keyword": "*System.Net.WebClient).DownloadString(*"
              }
            },
            {
              "wildcard": {
                "Message.keyword": "*system.net.webclient).downloadfile(*"
              }
            }
          ]
        }
      }
    }
  }
}

И Do c в моем индексе, который включает:

message:Engine state is changed from None to Available. Details: NewEngineState=Available PreviousEngineState=None SequenceNumber=13 HostName=ConsoleHost HostVersion=5.1.18362.628 HostId=3dd1a50a-cc15-45e0-bf63-4456d556fb67 HostApplication=powershell.exe -command PowerShell -ExecutionPolicy bypass -noprofile -windowstyle hidden -command (New-Object System.Net.WebClient).DownloadFile('https://drive.google.com/uc?export=download EngineVersion=5.1.18362.628 RunspaceId=de762b62-056c-4be1-90bf-a12cfe6fbc72

Как вы можете видеть выше, он включает в себя:

(New-Object System. Net .WebClient) .DownloadFile ('https:....

Кажется, что фильтр здесь должен соответствовать сообщению, но когда я выполняю запрос через Kibana, ничего не совпадает, хотя я могу видеть выше do c внутри моего индекса через пользовательский интерфейс Kibana, если я просто запрашиваю *.

Я думаю, возможно, это потому, что запрос выше запрашивает Message.keyword? Как мне успешно hit документ выше?

Редактировать:

отображение: https://pastebin.com/cWN4jF3d

Пример данных: https://pastebin.com/SyErqaG8

Ответы [ 2 ]

0 голосов
/ 24 февраля 2020

Ключевое слово используется только для точного соответствия. Вам нужно будет сопоставить обычные поля, если вы хотите сопоставить только подстроку / подмножество строки, запросив Сообщение вместо Message.keyword :

 {
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "should": [
            {
              "wildcard": {
                "Message": "*System.Net.WebClient).DownloadString(*"
              }
            },
            {
              "wildcard": {
                "Message": "*system.net.webclient).downloadfile(*"
              }
            }
          ]
        }
      }
    }
  }
}
0 голосов
/ 23 февраля 2020

Существует две причины, по которым запрос не возвращает результат:

  1. Имя поля в отображении равно message, тогда как в запросе вы используете Message.
  2. A поле с keyword типом данных индексирует данные как они есть. Это означает, что он также будет чувствителен к регистру. В документе, которым вы поделились, есть текст System.Net.WebClient).DownloadFile(, где вы можете видеть, что есть символы в верхнем регистре, тогда как в поисковом запросе, который вы ожидаете соответствовать "*system.net.webclient).downloadfile(*", есть все символы нижнего регистра.

Поэтому запрос должен быть:

{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "should": [
            {
              "wildcard": {
                "message.keyword": "*System.Net.WebClient).DownloadString(*"
              }
            },
            {
              "wildcard": {
                "message.keyword": "*System.Net.WebClient).DownloadFile(*"
              }
            }
          ]
        }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...