Агрегация вложенных фильтров включает нулевые документы в doc_count - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть индекс эластичного поиска со следующим отображением:

{
"properties":{
    "asset":{
        "properties":{
            "customerId":{
                "type":"long"
            }
        }
    },
    "software":{
        "type": "nested",
        "properties":{
            "id":{
                "type":"long"
            },
         ... (more properties)
    }
}

}

Могут быть некоторые документы, имеющие "software":null Когда для атрибута программного обеспечения выполняется вложенный фильтр, например,id, doc_count в агрегации фильтров также включает те программы, которые имеют нулевое значение.

агрегация выглядит следующим образом:

"aggregations": {
    "aggs": {
        "nested": {
            "path": "software"
        },
        "aggregations": {
            "filtered": {
                "filter": {
                    "term": {
                        "software.type": {
                            "value": "Application",
                            "boost": 1.0
                        }
                    }
                },
                "aggregations": {
                    "software_ids": {
                        "terms": {
                            "field": "software.id",
                            "min_doc_count": 1,
                            "shard_min_doc_count": 0
                        }
                    }
                }

            }
        }
    }
}

Часть ответа:

"aggregations": {
    "aggs": {
        "doc_count": 129958,
        "filtered": {
            **"doc_count": 7094,**

Этот doc_count включает в себя «программное обеспечение»: null. Есть ли способ исключить их?

Редактировать: я рассмотрел вопрос об использовании «отсутствующего» параметра для агрегации внутренних терминов (т.е. для агрегации внутри агрегации фильтра).Но хотелось бы знать, есть ли способ вообще исключить такие «вложенные» нули из агрегатов.

1 Ответ

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

Отсутствует атрибут для спасения.

С атрибутом Missing вы можете указать, какое значение должно принимать поле, если поле отсутствует.Вы можете указать значение как "JUNK", и документ будет затем помещен в корзину JUNK в вашей агрегации.

Следующее должно работать сейчас.

    "aggregations": {
    "aggs": {
        "nested": {
            "path": "software"
        },
        "aggregations": {
            "filtered": {
                "filter": {
                    "term": {
                        "software.type": {
                            "value": "Application",
                            "boost": 1.0
                        }
                    }
                },
                "aggregations": {
                    "software_ids": {
                        "terms": {
                            "field": "software.id",
                            "min_doc_count": 1,
                            "shard_min_doc_count": 0,
                            "missing": "JUNK"
                        }
                    }
                }

            }
        }
    }
}
...