Сортировка разных документов в ElasticSearch DSL - PullRequest
0 голосов
/ 13 июня 2019

У меня есть три типа документов, проиндексированных в ElasticSearch: Car, Bike и Truck.Я написал запрос, чтобы получить все документы, которые соответствуют определенным критериям, но я также хочу отсортировать порядок, в котором Car s извлекается, используя только свойство, которое Car имеет и не найдено среди Bike и Truck.

Пока что это то, что у меня есть:

   {
    "query": {
        "bool": {
            "must": [{
                "match": {
                    "is_registered": true
                }
            }]
        }
    },
    "sort": [{
        "ac_type": {
            "order": "desc"
        }
    }]
}

Но я получаю сообщение об ошибке на Bikes, у которого нет свойства ac_type.

"type": "query_shard_exception",
"reason": "No mapping found for [bike.ac_type] in order to sort on",

Как получить все три типа документов, но отсортировать их только по полям, отображаемым в одном документе?

Отображение индекса для автомобиля:

{
    "car": {
        "aliases": {},
        "mappings": {
            "event": {
                "properties": {
                    "ac_type": {
                        "type": "long"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "creation_date": "1549617583913",
                "number_of_shards": "5",
                "number_of_replicas": "1",
                "uuid": "cuwdmQbBTLeaSpkvzW4kPw",
                "version": {
                    "created": "6030299"
                },
                "provided_name": "car"
            }
        }
    }
}

1 Ответ

0 голосов
/ 14 июня 2019

Одна вещь, которую вы можете сделать, это добавить параметр 'ac_type' во все документы.Для автомобиля вы можете добавить значения для этого параметра, а для других не добавить никакой ценности.По этому значению вы можете отсортировать документ, в котором есть данные, а для других это не имеет значения.

...