Облачная платформаAdvanced

Использование DSL для поиска данных в OpenSearch

Эта статья полезна?
Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

DSL — это указанный язык запросов для OpenSearch. Он является лучшим языком для взаимодействия между кластерами OpenSearch и клиентами. OpenSearch DSL — язык на основе JSON. Другие языки, такие как SQL, переводятся в OpenSearch DSL перед тем, как их можно использовать для взаимодействия с кластерами OpenSearch.

В этой теме перечислены некоторые из наиболее часто используемых операторов запросов OpenSearch DSL. Для получения более подробной информации смотрите Запрос DSL.

Пример использования DSL

Скомпилируйте содержимое запроса в формате JSON на странице Dev Tools в OpenSearch Dashboards и выполните запрос поиска.

Например, выполните следующую команду, чтобы получить все документы в тест индекс:

1
2
3
4
5
6GET /тест/_search
{
"query": {
"match_all": {}
}
}

Результат поиска также в формате JSON.

Общие операторы запросов DSL

  • Устанавливает фильтры запросов, что эквивалентно где в языке SQL.

    В приведённой ниже команде перед _search, поэтому все индексы запрашиваются. bool query позволяет вам объединять несколько поисковых запросов с булевыми условиями. фильтр принудительно фильтрует документы, у которых статус поле равно опубликовано и publish_date позже, чем 2015-01-01. должен указывается, что оба заголовок и контент должны включать Поиск.

    Note

    Разница между должен и фильтр заключается в том, что фильтр эквивалентно где в SQL, но его результаты не используются для оценки. Это должен поле также является обязательным критерием фильтра, но совпадающие документы оцениваются на основе релевантности. Наиболее релевантные документы отображаются вверху.

    GET /_search
    {
    "query": {
    "bool": {
    "must": [
    {
    "match": {
    "title": "Search"
    }
    },
    {
    "match": {
    "content": "search"
    }
    }
    ],
    "filter": [
    {
    "term": {
    "status": "published"
    }
    },
    {
    "range": {
    "publish_date": {
    "gte": "2015-01-01"
    }
    }
    }
    ]
    }
    }
    }
  • Агрегации аналогичны Группировка по в SQL.

    Агрегация суммирует ваши данные в виде метрик, статистики или другой аналитики. В примере ниже результаты агрегируются по полю title в тест индекс. Если title имеет тип text (включая keyword), используйте title.keyword для агрегирования. По умолчанию кластер не может напрямую агрегировать данные типа text. titles это только пример имени агрегации. Вы можете назвать агрегацию titleaggs вместо.

    GET /test/_search
    {
    "aggs": {
    "titles": {
    "terms": {
    "field": "title.keyword"
    }
    }
    }
    }

    Приведённый выше пример запроса агрегации включает все документы в тест индекс. То есть, match_all используется. Вы можете задать критерии поиска, чтобы сузить область агрегации до конкретных документов.