Elasticsearch Query DSLを使用したフィルタリング
標準のElasticsearch Query DSLを使用して、フィルターパラメータにクエリを指定することで、SQLが実行する結果をフィルタリングできます。
Python
resp = client.sql.query(
format="txt",
query="SELECT * FROM library ORDER BY page_count DESC",
filter={
"range": {
"page_count": {
"gte": 100,
"lte": 200
}
}
},
fetch_size=5,
)
print(resp)
Ruby
response = client.sql.query(
format: 'txt',
body: {
query: 'SELECT * FROM library ORDER BY page_count DESC',
filter: {
range: {
page_count: {
gte: 100,
lte: 200
}
}
},
fetch_size: 5
}
)
puts response
Js
const response = await client.sql.query({
format: "txt",
query: "SELECT * FROM library ORDER BY page_count DESC",
filter: {
range: {
page_count: {
gte: 100,
lte: 200,
},
},
},
fetch_size: 5,
});
console.log(response);
Console
POST /_sql?format=txt
{
"query": "SELECT * FROM library ORDER BY page_count DESC",
"filter": {
"range": {
"page_count": {
"gte" : 100,
"lte" : 200
}
}
},
"fetch_size": 5
}
次のように返されます:
テキスト
author | name | page_count | release_date
---------------+------------------------------------+---------------+------------------------
Douglas Adams |The Hitchhiker's Guide to the Galaxy|180 |1979-10-12T00:00:00.000Z
標準のQuery DSLフィルタリングの便利であまり明白でない使用法は、特定のルーティングキーでドキュメントを検索することです。Elasticsearch SQLはrouting
パラメータをサポートしていないため、terms
フィルタを_routing
フィールドに指定できます代わりに:
Python
resp = client.sql.query(
format="txt",
query="SELECT * FROM library",
filter={
"terms": {
"_routing": [
"abc"
]
}
},
)
print(resp)
Ruby
response = client.sql.query(
format: 'txt',
body: {
query: 'SELECT * FROM library',
filter: {
terms: {
_routing: [
'abc'
]
}
}
}
)
puts response
Js
const response = await client.sql.query({
format: "txt",
query: "SELECT * FROM library",
filter: {
terms: {
_routing: ["abc"],
},
},
});
console.log(response);
Console
POST /_sql?format=txt
{
"query": "SELECT * FROM library",
"filter": {
"terms": {
"_routing": ["abc"]
}
}
}