Почему некоторые поля не подходят для запроса bool? - PullRequest
0 голосов
/ 13 февраля 2019

Раньше я думал, что знаю, как использовать запросы bool, но то, что я делал раньше, похоже, больше не работает: некоторые поля могут быть отфильтрованы через запрос bool, а некоторые другие не могут.

(я тестирую на V6, поэтому, может быть, что-то изменилось за это время, но документация , похоже, не предлагает этого)

Запрос

GET /security-center*/_search
{
  "query": {
    "match_all": {}
  }
}

выводит документы, такие как

{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 1487073,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "security-center-2019.01.24",
        "_type" : "doc",
        "_id" : "igzyfWgBcCggV6jwR96k",
        "_score" : 1.0,
        "_source" : {
          "vulns_port" : "49666",
          "hosts_vulns_scanners_0_loadavg" : "0.0",
          "vulns_patchpubdate" : "-1",
          "vulns_description" : "This script uses WMI to list the processes running on the remote host\nand listening on TCP / UDP ports.",
          "hosts_vulns_completedchecks" : "3046410",
          "vulns_family_id" : "20",
          "hosts_vulns_repository_description" : "CREATED",
          "hosts_vulns_completedips" : "30",
          "hosts_vulns_ownergroup_id" : "0",
          "hosts_vulns_ownergroup_name" : "Full Access",
          "host_dmz" : "False",
(...)

Я сделаю запрос для двух полей выше: vulns_port и hosts_vulns_ownergroup_name, точно взяв условия bool из документа выше.

Дело 1: vulns_port (ОК)

Я хочу получить документы, где vulns_port равно 49666:

GET /security-center*/_search
{
  "query": {
    "bool": {
      "must": {
        "term": { "vulns_port" : "49666" }
      }
    }
  }
}

Результат:

{
  "took" : 83,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 4142,
    "max_score" : 5.9115334,
    "hits" : [
      {
        "_index" : "security-center-2019.01.24",
        "_type" : "doc",
        "_id" : "PKT0fWgBHaYvxmURB5eY",
        "_score" : 5.9115334,
        "_source" : {
          "vulns_port" : "49666",
          "hosts_vulns_scanners_0_loadavg" : "0.03",
(...)

Дело 2: hosts_vulns_ownergroup_name (KO)

Я хочу получить документы, где hosts_vulns_ownergroup_name Full Access:

GET /security-center*/_search
{
  "query": {
    "bool": {
      "must": {
        "term": { "hosts_vulns_ownergroup_name" : "Full Access" }
      }
    }
  }
}

Результат:

{
  "took" : 18,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

Где проблема?

1 Ответ

0 голосов
/ 13 февраля 2019

Поскольку вы используете ES6, попробуйте использовать вместо этого подполе .keyword:

GET /security-center*/_search
{
  "query": {
    "bool": {
      "must": {
        "term": { "hosts_vulns_ownergroup_name.keyword" : "Full Access" }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...