[Перевод] Официальная документация ElasticSearch — язык запросов

задняя часть SQL Elasticsearch
[Перевод] Официальная документация ElasticSearch — язык запросов

Эта статья переведена с:woohoo.elastic.co/expensive/en/bad…

Эта статья является вводным документом для Elasticsearch, в котором будет представлен язык запросов в ElasticSearch.

язык запросов

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

Возвращаясь к нашему последнему примеру, мы выполнили этот запрос:

GET /bank/_search
{
  "query": { "match_all": {} }
}

Анализируя приведенное выше, часть запроса сообщает нам, что такое определение запроса, в то время какmatch_allЧасть — это тип запроса, который мы хотим запустить.match_allЗапрос просто ищет все документы в указанном индексе.

КромеqueryВ дополнение к параметрам мы также можем передавать другие параметры, влияющие на результаты поиска. В приведенном выше примере мы передаемsort, здесь мы проходимsize:

GET /bank/_search
{
  "query": { "match_all": {} },
  "size": 1
}

Обратите внимание, что если не указаноsize, по умолчанию 10.

Этот пример выполняетmatch_allи возвращает документы с 11 по 20:

GET /bank/_search
{
  "query": { "match_all": {} },
  "from": 10,
  "size": 10
}

fromПараметр (начиная с 0) указывает, с какого индекса документа начинать,sizeПараметры указаны изfromПараметр начинается с количества возвращаемых документов. Эта функция полезна при реализации результатов поиска с разбивкой на страницы. Обратите внимание, что если не указаноfrom, по умолчанию 0.

Этот пример выполняетmatch_all, а результат сортируется по балансу счета в порядке убывания и возвращает первые 10 документов (размер по умолчанию).

GET /bank/_search
{
  "query": { "match_all": {} },
  "sort": { "balance": { "order": "desc" } }
}

выполнить поиск

Теперь, когда мы рассмотрели некоторые основные параметры поиска, давайте взглянем на DSL запроса. Давайте сначала посмотрим на возвращаемые поля документа. По умолчанию полные документы JSON возвращаются как часть всех поисков. Это называется источником (т._sourceполе). Если мы не хотим возвращать весь исходный документ, у нас есть возможность запросить возврат только нескольких полей из исходного документа.

В этом примере показано, как вернуть два поля из поискаaccount_numberа такжеbalance(_sourceвнутренний):

GET /bank/_search
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}

Обратите внимание, что приведенный выше пример просто уменьшает поле _source. он по-прежнему возвращает только файл с именем_source, но содержит в себе только поляaccount_numberа такжеbalance.

Если у вас есть технический опыт работы с SQL, вышеизложенное концептуально совпадает сSQL SELECT FROMСписок полей несколько похож.

Теперь давайте посмотрим на часть запроса. Ранее мы видели, как использоватьmatch_allзапрос для сопоставления всех документов. Теперь давайте представимmatch query, который можно рассматривать как базовый поисковый запрос поля (то есть поиск определенного поля или набора полей). Номер учетной записи, возвращаемый в этом примере, равен 20:

GET /bank/_search
{
  "query": { "match": { "account_number": 20 } }
}

В этом примере возвращаются все учетные записи, содержащие термин «мельница» в адресе:

GET /bank/_search
{
  "query": { "match": { "address": "mill" } }
}

В этом примере возвращаются все учетные записи, содержащие термин «мельница» или «переулок» в адресе:

GET /bank/_search
{
  "query": { "match": { "address": "mill lane" } }
}

Этот примерсовпадение (сопоставление_фразы)Вариант , который возвращает все аккаунты, содержащие в адресе словосочетание «мельничный переулок»:

GET /bank/_search
{
  "query": { "match_phrase": { "address": "mill lane" } }
}

Теперь позвольте мне представитьbool query. логический запрос
Позволяет нам объединять более мелкие запросы в более крупные, используя логическую логику.

Этот пример состоит из двухmatchЗапросить и вернуть все учетные записи, содержащие «mill» и «lane» в адресе:

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

В приведенном выше примереbool mustусловие, указывающее, что документ считается совпадающим, должно быть истинным для всех запросов.

Напротив, этот пример состоит из двухmatchЗапросить и вернуть все учетные записи со словом «мельница» или «переулок» в адресе:

GET /bank/_search
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

В приведенном выше примереbool shouldПредложение указывает список запросов, которые соответствуют любому из документов, чтобы быть истинным.

Этот пример составляет два совпадающих запроса и возвращает все учетные записи, которые не содержат ни «мельница», ни «лейн» в адресе:

GET /bank/_search
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}

В приведенном выше примереbool must_notПредложение указывает список запросов, ни один из которых не является истинным для документа, который считается совпадением.

Мы можем комбинировать предложения must, should и must_not в одном логическом запросе. Кроме того, мы можем комбинировать логические запросы в любом из этих логических предложений для имитации любой сложной многоуровневой логической логики.

Этот пример возвращает все 40 лет, ноstateВсе аккаунты людей, которые не являются ID:

GET /bank/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "ID" } }
      ]
    }
  }
}