ElasticSearch Nested Query - исключить родительский документ
Попытка исключить документы верхнего уровня, если один из дочерних документов не соответствует запросу.
В приведенном ниже примере я пытаюсь исключить все документы, в которых одно из вложенных заданий имеет current: true
и совпадает с company name: Elastic
, Но так как один из вложенных рабочих документов совпадает с current: false
и компания name: Elastic
, этот документ возвращается. Я использую вложенный запрос с обязательным совпадением по названию компании и фильтром, где current: false. Как сделать так, чтобы приведенный ниже документ не был возвращен?
"name": "john doe",
"jobs": [
{
"title": "Vice President",
"current": true,
"company": {
"name": "Elastic"
}
},
{
"title": "CEO",
"current": false,
"company": {
"name": "Elastic"
}
...
1 ответ
Как насчет этого? Обратите внимание, что я предположил, что у вас есть .keyword
подполе, которое в основном совпадает с заглавной буквой. Если у вас это по-другому, измените имя поля соответственно:
{
"query": {
"bool": {
"must_not": [
{
"nested": {
"path": "jobs",
"query": {
"bool": {
"must": [
{
"term": {
"jobs.current": {
"value": "true"
}
}
},
{
"term": {
"jobs.company.name.keyword": {
"value": "Elastic"
}
}
}
]
}
}
}
}
]
}
}
}