これは小さな API ですが、特に SQL データベースから来た開発者にとって非常に有益なツールです。また、SQL クエリを対応する検索クエリにすばやく関連付けることで、学習曲線を短縮することもできます。
次に、Elasticsearch 検索 API とサポートされているクエリ言語のすべての機能を調べることができます。
Elasticsearch は SQL をサポートしていますが、さまざまな制限があることに注意してください。
クエリ構文
以下は、翻訳 API の構文を示しています。
GET _sql/translate
{
request_body
}
次の構文に示すように、post リクエストを翻訳 API に送信することもできます。
POST _sql/translate
{
request_body
}
クラスターの構成によっては、データを照会するインデックスに対する読み取り権限が API に必要になる場合があります。ターゲット リソースをインデックス エイリアスまたはデータ ストリームとして指定することもできます。
request_body では、すべての SQL Search API 要求本文パラメーターを指定できます。詳細については、次のリソースで提供されているドキュメントを参照してください。
応答として、クエリはクエリされたデータを含む検索 API に対応する結果を返す必要があります。
例
この API の使用方法をわかりやすく説明するために、Netflix の映画とテレビ番組に関するすべてのデータを含む「netflix」というインデックスがあると仮定します。
2020 年以降にリリースした Netflix インデックスから上位 5 つの映画を取得したいとします。
同等の SQL クエリは、次のように表現できます。
タイトル、期間、レーティング、タイプを選択 FROM netflix WHERE タイプ = '映画' AND release_year >= 2020年上記の SQL 検索を Elasticsearch で実行するには、以下に示すように SQL 検索 API に配置します。
カール-XGET 「http://localhost:9200/_sql?format=txt」 -H 「kbn-xsrf: レポート」 -H 「コンテンツ タイプ: アプリケーション/json」 -d '{
'クエリ': ' \n SELECT title, duration, rating, type FROM 'netflix' WHERE type = ' \ '' 映画 ' \' ' AND release_year >= 2020年 \n '、
' fetch_size ': 5
}'
前のリクエストでインデックスをクエリし、一致するレコードをフェッチする必要があります。返される出力は、以下に示すテキスト形式です。
ご覧のとおり、Elasticsearch は期待どおりの出力を返します。
出力を JSON として返すには、以下に示すように形式を JSON に設定できます。
カール-XGET 'http://localhost:9200/_sql?format=json' -H 「kbn-xsrf: レポート」 -H 「コンテンツ タイプ: アプリケーション/json」 -d '{
'クエリ': ' \n SELECT title, duration, rating, type FROM 'netflix' WHERE type = ' \ '' 映画 ' \' ' AND release_year >= 2020年 \n '、
' fetch_size ': 5
}'
出力:
SQL クエリを検索リクエストに変換する
以前の SQL 検索クエリを Elasticsearch リクエストに変換するには、以下に示すように、それを変換 API に渡すことができます。
カール-XGET 'http://localhost:9200/_sql/translate' -H 「kbn-xsrf: レポート」 -H 「コンテンツ タイプ: アプリケーション/json」 -d '{
'クエリ': ' \n SELECT title, duration, rating, type FROM 'netflix' WHERE type = ' \ '' 映画 ' \' ' AND release_year >= 2020年 \n '、
' fetch_size ': 5
}'
次の出力に示すように、API は入力 SQL 入力を解析し、有効な検索要求に変換する必要があります。
{'サイズ' : 5 、
「クエリ」 : {
「ブール」 : {
'しなければならない' : [
{
'学期' : {
'タイプ' : {
'価値' : '映画'
}
}
}、
{
'範囲' : {
「リリース年」 : {
「グテ」 : 2020年 、
'ブースト' : 1
}
}
}
]、
'ブースト' : 1
}
}、
'_ソース' : 間違い、
'田畑' : [
{
'分野' : '題名'
}、
{
'分野' : '間隔'
}、
{
'分野' : 「評価」
}、
{
'分野' : 'タイプ'
}
]、
'選別' : [
{
'_doc' : {
'注文' : 'asc'
}
}
]
}
次に、このリクエスト形式を使用して、以下に示すように Elasticsearch 検索 API に送信できます。
カール -XPOST 'http://localhost:9200/netflix/_search' -H 「kbn-xsrf: レポート」 -H 「コンテンツ タイプ: アプリケーション/json」 -d '{
'サイズ': 5,
'クエリ': {
'ブール': {
'しなければならない': [
{
'学期': {
'タイプ': {
'値': '映画'
}
}
}、
{
'範囲': {
'リリース年': {
'gte': 2020,
「ブースト」:1
}
}
}
]、
「ブースト」:1
}
}、
'_source': false,
'田畑': [
{
「フィールド」:「タイトル」
}、
{
'フィールド': '期間'
}、
{
「フィールド」:「評価」
}、
{
「フィールド」:「タイプ」
}
]、
'選別': [
{
'_doc': {
'注文': '昇順'
}
}
]
}'
同様に、リクエストは以下に示すような同様のデータを返す必要があります。
結論
この投稿を通じて、SQL クエリを使用して既存の Elasticsearch インデックスからデータをフェッチする方法を発見しました。また、translate SQL API を使用して有効な SQL クエリを Elasticsearch リクエストに変換する方法も学びました。