Я пытаюсь найти способ сделать это в Elasticsearch, не делая несколько запросов, или используя _mget
, если необходимо.
У меня много документов с такой структурой:
{
'location': 'Orlando',
'agent_id': 395205,
},
{
'location': 'Miami',
'agent_id': 391773,
},
{
'location': 'Miami',
'agent_id': 391773,
},
{
'location': 'Tampa',
'agent_id': 395205,
}
Там, где есть фиксированное количество location
значений, но много уникальных agent_id
s.
Моя конечная цель, учитывая список местоположений, найти agent_id
s, которые существуют во всех из них. Таким образом, в приведенном выше примере, учитывая ['Orlando', 'Tampa']
, мы получаем [395205]
назад, потому что он существует в обоих. Одно местоположение МОЖЕТ иметь дубликаты agent_id
с (и это ожидаемое поведение), поэтому я не могу использовать счетчики (например, показать мне agent_id
с, которые появляются n
раз, где n = len(locations)
.
Еще один ключ здесь заключается в том, что я хотел бы на самом деле возвращать попадания, если это возможно, а не в совокупном ведре. Так что в идеале top_hits
может быть где-то вложено.
Я думаю, что это может быть возможно с использованием некоторых умная фильтрация или, возможно, некоторая жесткая оценка, но я не знаю, как к ним приблизиться. У меня это работает с использованием нескольких запросов, но я считаю процесс слишком дорогим и хотел бы упростить его, если это вообще возможно. Я понимаю, что на самом деле это может быть невозможным, но любопытно услышать любые другие варианты.