Поисковый запрос Elasticsearch: пакетный поиск нескольких элементов? - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть запросasticsearch, и я перебираю список координат в python, вставляю по одному в запрос в каждом цикле и добавляю результаты в фрейм данных.

Мне нужен более быстрый способ получения результатов поиска для моего списка координат, например, пакетная обработка их всех сразу.

Я изучил запрос терминов, и этот ответ: ElasticSearch.Как передать массив в шаблон поиска

Но не удалось.

Это оригинальный запрос, в котором я передаю координаты местоположения по одной координате за раз:

{
    "size": 0,
    "_source": false,
    "query": {
        "filtered": {
            "filter": {
                "and": [{
                    "geo_distance": {
                        "distance": "50mi"
                        "location": "35.323312, -23.14848"
                    }
                },
                {
                    "bool": {
                        "must": {
                            "term": {
                                "id_from_store": 99
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "must": {
                            "term": {
                                "is_new": 1
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "must": {
                            "range": {
                                "datetime_shelf": {
                                    "gte": "2018-02-01"
                                }
                            }
                        }
                    }
                }]
            }
        }
    },
    "aggs": {
        "group_by_listing": {
            "terms": {
                "field": "p_id",
                "size": 200 
            }
        }
    }
}

Есть ли способ передать список координат сразу?

{
    "size": 0,
    "_source": false,
    "query": {
        "filtered": {
            "filter": {
                "and": [{
                    "geo_distance": {
                        "distance": "50mi"
                        "location": ["35.323312, -23.14848", "45.23423,  34.2348", ...]
                    }
                },
                {
                    "bool": {
                        "must": {
                            "term": {
                                "id_from_store": 99
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "must": {
                            "term": {
                                "is_new": 1
                            }
                        }
                    }
                },
                {
                    "bool": {
                        "must": {
                            "range": {
                                "datetime_shelf": {
                                    "gte": "2018-02-01"
                                }
                            }
                        }
                    }
                }]
            }
        }
    },
    "aggs": {
        "group_by_listing": {
            "terms": {
                "field": "p_id",
                "size": 200 
            }
        }
    }
}```

the query returns a dict of p_id with doc_count. Would this be nested for each coordinate? How do I make it return the aggregated doc counts of p_id for each coordinate?

1 Ответ

0 голосов
/ 27 сентября 2019

Как насчет использования MultiSearch API и отправки всех запросов одновременно?

GET myindex/_msearch
{}
{"size" : 0, "query": {... "35.323312, -23.14848" ...} }
{}
{"size" : 0, "query": {... "45.23423,  34.2348" ...} }
{}
{"size" : 0, "query": {... "35.23423,  -21.234556" ...} }

Таким образом, вы можете создавать все свои запросы одновременно, отправлять их за один раз, иметь ESвыполнить их все и вернуть все результаты в том же порядке в массиве ответов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...