Запрос ElasticSearch для поиска записей, не соответствующих - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть несколько записей типа компаний, которые являются вложенным json документом, сохраненным в поиске elasti c. Компании имеют следующую структуру:

{"companies" : [{
  "company" : {
    "manager" : [{
      "name" : "abc",
      "age" : "40"
    }],
    "employee_count" : "2300",
    "profit" : "10"
  },
  "company" : {
    "manager" : [{
      "name" : "def",
      "age" : "41"
    }],
    "employee_count" : "2200",
    "profit" : "10"
  },
  "company" : {
    "manager" : [{
      "name" : "ghi",
      "age" : "42"
    }],
    "employee_count" : "2100",
    "profit" : "10"
  }
}]
}

Мне нужно найти количество записей компаний, где NONE of company.manager.name равно "ab c".

Я пытался использовать следующий запрос, но он не работает.

GET index / _search

{
  "query": {
    "bool" : {
      "must_not" : [{
        "match" : {
          "company.manager.name" : "abc"
        }
      }]
    }
  }
}

Любая помощь приветствуется. Спасибо!

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Если вам нужно подсчитать количество элементов, вы должны сначала агрегировать данные на основе этого условия. Взгляните на этот раздел официальной документации Elasti c.

0 голосов
/ 21 апреля 2020

Поскольку вы используете отображение nested, вам нужно указать путь nested при запросе данных, пожалуйста, обратитесь к этому официальному действию c для примера вложенного запроса

Ваш запрос должен выглядеть следующим образом: nested path

{
    "query": {
        "nested": {
            "path": "companies",  --> note this
            "query": {
                "bool": {
                    "must_not": [
                        {
                            "match": {
                                "company.manager.name": "abc"
                            }
                        }
                    ]
                }
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...