API-интерфейс Elasticsearch для перевода SQL

Api Interfejs Elasticsearch Dla Perevoda Sql



В этом посте мы узнаем, как преобразовать поиск SQL в действительный запрос API поиска Elasticsearch, содержащий полный язык доменных запросов на основе JSON.

Хотя это небольшой API, это очень полезный инструмент, особенно для разработчиков, работающих с базами данных SQL. Это также может сократить время обучения, быстро связывая SQL-запросы с соответствующими поисковыми запросами.

Затем вы сможете изучить все возможности API поиска Elasticsearch и поддерживаемые языки запросов.







Следует иметь в виду, что, хотя Elasticsearch поддерживает SQL, он имеет различные ограничения.



Синтаксис запроса

Ниже показан синтаксис API перевода:



ПОЛУЧИТЬ _sql/перевести

{

request_body

}

Вы также можете отправить почтовый запрос в API перевода, как показано в следующем синтаксисе:





ПОСТ _sql/перевести

{

request_body

}

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

В request_body можно указать все параметры тела запроса API поиска SQL. Изучите документы, представленные в следующем ресурсе, чтобы узнать больше:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

В качестве ответа запрос должен вернуть результат, соответствующий поисковому API с запрошенными данными.

Пример

Чтобы лучше проиллюстрировать, как использовать этот API, предположим, что у нас есть индекс под названием «netflix», содержащий все данные о фильмах и телешоу Netflix.

Предположим, мы хотим получить пять лучших фильмов из индекса Netflix, которые мы выпустили в 2020 году и выше:

Эквивалентный запрос SQL может быть выражен, как показано ниже:

ВЫБЕРИТЕ название, продолжительность, рейтинг, тип ОТ netflix ГДЕ тип = 'Кино' И выпуск_год >= 2020

Чтобы выполнить вышеуказанный поиск SQL в Elasticsearch, мы можем поместить его в API поиска SQL, как показано ниже:

завиток -XGET «http://localhost:9200/_sql?format=txt» -ЧАС 'kbn-xsrf: отчетность' -ЧАС 'Тип контента: приложение/json' '

{

'запрос': ' \n ВЫБЕРИТЕ название, продолжительность, рейтинг, тип ОТ «netflix», ГДЕ тип = '
\ '' Кино ' \' ' И выпуск_год >= 2020 \n ',

'
fetch_size ': 5

}'

Предыдущий запрос должен запрашивать индекс и извлекать соответствующие записи. Возвращаемый вывод находится в текстовом формате, как показано ниже:

Как мы видим, Elasticsearch возвращает ожидаемый результат.

Чтобы вернуть вывод в виде JSON, мы можем установить формат JSON, как показано ниже:

завиток -XGET 'http://localhost:9200/_sql?format=json' -ЧАС 'kbn-xsrf: отчетность' -ЧАС 'Тип контента: приложение/json' '

{

'запрос': ' \n ВЫБЕРИТЕ название, продолжительность, рейтинг, тип ОТ «netflix», ГДЕ тип = '
\ '' Кино ' \' ' И выпуск_год >= 2020 \n ',

'
fetch_size ': 5

}'

Выход:

Преобразование SQL-запроса в поисковый запрос

Чтобы преобразовать предыдущий поисковый запрос SQL в запрос Elasticsearch, мы можем передать его в API перевода, как показано ниже:

завиток -XGET 'http://localhost:9200/_sql/translate' -ЧАС 'kbn-xsrf: отчетность' -ЧАС 'Тип контента: приложение/json' '

{

'запрос': ' \n ВЫБЕРИТЕ название, продолжительность, рейтинг, тип ОТ «netflix», ГДЕ тип = '
\ '' Кино ' \' ' И выпуск_год >= 2020 \n ',

'
fetch_size ': 5

}'

API должен анализировать входной SQL-запрос и преобразовывать его в допустимый поисковый запрос, как показано в следующем выводе:

{
'размер' : 5 ,
'запрос' : {
'буль' : {
'должен' : [
{
'срок' : {
'тип' : {
'ценность' : 'Кино'
}
}
},
{
'диапазон' : {
'год_выпуска' : {
'гтэ' : 2020 ,
'способствовать росту' : 1
}
}
}
],
'способствовать росту' : 1
}
},
'_источник' : ЛОЖЬ,
'поля' : [
{
'поле' : 'заглавие'
},
{
'поле' : 'продолжительность'
},
{
'поле' : 'рейтинг'
},
{
'поле' : 'тип'
}
],
'Сортировать' : [
{
'_doc' : {
'заказ' : 'по возрастанию'
}
}
]
}

Затем вы можете использовать этот формат запроса для отправки в поисковый API Elasticsearch, как показано ниже:

завиток-XPOST 'http://localhost:9200/netflix/_search' -ЧАС 'kbn-xsrf: отчетность' -ЧАС 'Тип контента: приложение/json' '
{
'размер': 5,
'запрос': {
'буль': {
'должен': [
{
'срок': {
'тип': {
'значение': 'Фильм'
}
}
},
{
'диапазон': {
'год_релиза': {
'ГТЭ': 2020 г.,
'буст': 1
}
}
}
],
'буст': 1
}
},
'_source': ложь,
'поля': [
{
'поле': 'название'
},
{
'поле': 'длительность'
},
{
'поле': 'рейтинг'
},
{
'поле': 'тип'
}
],
'Сортировать': [
{
'_doc': {
'порядок': 'по возрастанию'
}
}
]
}'

Точно так же запрос должен возвращать аналогичные данные, как показано ниже:

Вывод

В этом посте вы узнали, как можно использовать SQL-запросы для извлечения данных из существующего индекса Elasticsearch. Вы также узнали, как использовать API-интерфейс перевода SQL для преобразования действительного запроса SQL в запрос Elasticsearch.