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

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

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

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

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

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

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

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

1
2
3
4
5
6GET /test/_search
{
"query": {
"match_all": {}
}
}

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

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

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

    В команде ниже нет фильтра индекса перед _search, поэтому все индексы запрашиваются. Bool‑запрос позволяет объединять несколько поисковых запросов с булевыми условиями. фильтр принудительно фильтрует документы у которых статус поле опубликовано и 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 используется. Вы можете установить критерии поиска, чтобы сузить область агрегации до конкретных документов.