GOOGLE ADS

вторник, 12 апреля 2022 г.

Могу ли я запросить два разных индекса с разными структурами и объединить результаты в elasticsearch?

Я пытаюсь выяснить, возможен ли запрос определенного типа с помощью Elasticsearch, и если да, то как на самом деле написать этот запрос.

У меня есть два индекса groupsи challenges. Форма данных для этих двух индексов различна, но они оба имеют поле с именем id.

Я хочу выполнить поиск по разным полям для двух индексов. Например, groupsя хочу выполнить поиск по code, name, description. Для challenges, это те же поля, но также несколько других, некоторые во вложенных данных.

Мне удалось запустить простой запрос, который, казалось, возвращал комбинацию результатов из обоих индексов, используя запрос URI без указания индекса. ЭГ: /search?q=some%20search. Прохладно.

Однако мне нужно отфильтровать результаты, чтобы они включали только те группы и задачи, которые разрешено видеть текущему пользователю. В моем приложении я могу легко получить их список, permitted_group_idsи файлы permitted_challenge_ids. Я планировал переключиться на запрос тела json и добавить фильтр, но я не смог понять синтаксис, особенно в отношении фильтра.

Итак, пара вопросов:

  • Каков синтаксис запроса 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]}}
    ]}}
    ]
    }
    }
    }

    Комментариев нет:

    Отправить комментарий

    Laravel Datatable addColumn returns ID of one record only

    Я пытаюсь использовать Yajra Datatable для интеграции DataTable на свой веб-сайт. Я смог отобразить таблицу, но столкнулся с проблемой. В по...