Я пытаюсь выяснить, возможен ли запрос определенного типа с помощью Elasticsearch, и если да, то как на самом деле написать этот запрос.
У меня есть два индекса groupsи challenges. Форма данных для этих двух индексов различна, но они оба имеют поле с именем id.
Я хочу выполнить поиск по разным полям для двух индексов. Например, groupsя хочу выполнить поиск по code, name, description. Для challenges, это те же поля, но также несколько других, некоторые во вложенных данных.
Мне удалось запустить простой запрос, который, казалось, возвращал комбинацию результатов из обоих индексов, используя запрос URI без указания индекса. ЭГ: /search?q=some%20search. Прохладно.
Однако мне нужно отфильтровать результаты, чтобы они включали только те группы и задачи, которые разрешено видеть текущему пользователю. В моем приложении я могу легко получить их список, permitted_group_idsи файлы permitted_challenge_ids. Я планировал переключиться на запрос тела json и добавить фильтр, но я не смог понять синтаксис, особенно в отношении фильтра.
Итак, пара вопросов:
/search?q=some%20search? Документация, кажется, говорит, что я должен каким-то образом использовать bool, но похоже, что мне нужно вручную указать поля для поиска (которые различаются между двумя индексами) и что все они должны соответствовать строке поиска.idразных индексов?В псевдокоде это то, что я пытаюсь выполнить:
Уважаемый ElasticSearch,
Пожалуйста, найдите все записи в индексах groupsи challenges, которые соответствуют строке "zamboni". После того, как вы определили их, ограничьте группы только теми, чье idзначение находится в [1, 2, 3], а задачи — теми, чье idзначение находится в [3, 4, 5]. Спасибо!
С уважением, Ваш Дружелюбный Застройщик.
Буду признателен за любую помощь, даже за то, что я укажу на определенные фрагменты документации Elasticsearch для чтения. Благодарю вас!
Решение проблемы
Что-то вроде этого:
GET groups,challenges/_search
{
"size": 10,
"_source": false, // or ["whatever", "data", "you", "need"]
"query": {
"bool": {
"minimum_should_match": 1,
"should": [
{"bool": {"must": [
{"term": {"_index": "groups"}},
{"term": {"code": "zamboni"}},
{"term": {"name": "zamboni"}},
{"term": {"description": "zamboni"}},
{"terms": {"id": [1, 2, 3]}}
]}},
{"bool": {"must": [
{"term": {"_index": "challenges"}},
{"term": {"code": "zamboni"}},
{"term": {"name": "zamboni"}},
{"term": {"description": "zamboni"}},
{"terms": {"id": [3, 4, 5]}}
]}}
]
}
}
}
Комментариев нет:
Отправить комментарий