範囲クエリ
指定された範囲内の用語を含むドキュメントを返します。
例リクエスト
次の検索は、age
フィールドが 10
と 20
の間の用語を含むドキュメントを返します。
Python
resp = client.search(
query={
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
range: {
age: {
gte: 10,
lte: 20,
boost: 2
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2.0
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
range: {
age: {
gte: 10,
lte: 20,
boost: 2,
},
},
},
});
console.log(response);
コンソール
GET /_search
{
"query": {
"range": {
"age": {
"gte": 10,
"lte": 20,
"boost": 2.0
}
}
}
}
範囲のトップレベルパラメータ
<field>
- (必須、オブジェクト) 検索したいフィールド。
のパラメータ
gt
- (オプション)より大きい。
gte
- (オプション)以上。
lt
- (オプション)より小さい。
lte
- (オプション)以下。
format
(オプション、文字列)クエリ内の
date
値を変換するために使用される日付形式。
デフォルトでは、Elasticsearch は<field>
のマッピングで提供された dateformat
を使用します。この値はそのマッピング形式を上書きします。
有効な構文については、format
を参照してください。
形式または日付値が不完全な場合、範囲クエリは欠落しているコンポーネントをデフォルト値で置き換えます。 欠落した日付コンポーネントを参照してください。relation
- (オプション、文字列)
range
フィールドの値に対して範囲クエリがどのように一致するかを示します。有効な値は次のとおりです:INTERSECTS
(デフォルト)- クエリの範囲と交差する範囲フィールド値を持つドキュメントと一致します。
CONTAINS
- クエリの範囲を完全に含む範囲フィールド値を持つドキュメントと一致します。
WITHIN
- クエリの範囲内に完全にある範囲フィールド値を持つドキュメントと一致します。
time_zone
- (オプション、文字列)
date
値を UTC に変換するために使用される 協定世界時 (UTC) オフセット または IANA タイムゾーン。
有効な値は、+01:00
や -08:00
のような ISO 8601 UTC オフセット、およびAmerica/Los_Angeles
のような IANA タイムゾーン ID です。time_zone
パラメータを使用した例のクエリについては、range
クエリのタイムゾーンを参照してください。time_zone
パラメータは、now
の 日付計算 値に影響を与えません。now
は常に UTC の現在のシステム時間です。
ただし、time_zone
パラメータは、now
および 日付計算の丸め を使用して計算された日付を変換します。たとえば、time_zone
パラメータはnow/d
の値を変換します。 boost
- (オプション、浮動小数点数) クエリの関連スコアを減少または増加させるために使用される浮動小数点数。デフォルトは
1.0
です。boost
パラメータを使用して、2つ以上のクエリを含む検索の関連スコアを調整できます。
ブースト値は1.0
のデフォルト値に対して相対的です。0
と1.0
の間のブースト値は関連性スコアを減少させます。1.0
より大きい値は関連性スコアを増加させます。
ノート
テキストおよびキーワードフィールドでの範囲クエリの使用
text
または keyword
フィールドに対する範囲クエリは、search.allow_expensive_queries
が false に設定されている場合、実行されません。
日付フィールドでの範囲クエリの使用
<field>
パラメータが date
フィールドデータ型である場合、次のパラメータを使用して 日付計算 を使用できます:
gt
gte
lt
lte
たとえば、次の検索は、timestamp
フィールドが今日と昨日の間の日付を含むドキュメントを返します。
Python
resp = client.search(
query={
"range": {
"timestamp": {
"gte": "now-1d/d",
"lte": "now/d"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
range: {
timestamp: {
gte: 'now-1d/d',
lte: 'now/d'
}
}
}
}
)
puts response
Js
const response = await client.search({
query: {
range: {
timestamp: {
gte: "now-1d/d",
lte: "now/d",
},
},
},
});
console.log(response);
コンソール
GET /_search
{
"query": {
"range": {
"timestamp": {
"gte": "now-1d/d",
"lte": "now/d"
}
}
}
}
欠落した日付コンポーネント
範囲クエリおよび 日付範囲 集約に対して、Elasticsearch は欠落した日付コンポーネントを次の値で置き換えます。欠落した年のコンポーネントは置き換えられません。
テキスト
MONTH_OF_YEAR: 01
DAY_OF_MONTH: 01
HOUR_OF_DAY: 23
MINUTE_OF_HOUR: 59
SECOND_OF_MINUTE: 59
NANO_OF_SECOND: 999_999_999
例えば、形式が yyyy-MM
の場合、Elasticsearch は gt
の値 2099-12
を 2099-12-01T23:59:59.999_999_999Z
に変換します。この日付は提供された年(2099
)と月(12
)を使用しますが、デフォルトの日(01
)、時間(23
)、分(59
)、秒(59
)、およびナノ秒(999_999_999
)を使用します。
数値日付範囲値
日付形式が指定されておらず、範囲クエリが日付フィールドを対象としている場合、数値値はエポックからのミリ秒を表すものとして解釈されます。値が年を表すようにしたい場合(例:2020)、それを文字列値(例:”2020”)として渡す必要があります。これはデフォルト形式または設定された形式に従って解析されます。
日付計算と丸め
Elasticsearch は、パラメータ内の 日付計算 値を次のように丸めます:
gt
- 丸められた日付でカバーされていない最初のミリ秒に切り上げます。
たとえば、2014-11-18||/M
は2014-12-01T00:00:00.000
に切り上げられ、11月全体は除外されます。 gte
- 最初のミリ秒に切り下げます。
たとえば、2014-11-18||/M
は2014-11-01T00:00:00.000
に切り下げられ、全月が含まれます。 lt
- 丸められた値の前の最後のミリ秒に切り下げます。
たとえば、2014-11-18||/M
は2014-10-31T23:59:59.999
に切り下げられ、11月全体は除外されます。 lte
- 丸めの間隔内の最新のミリ秒に切り上げます。
たとえば、2014-11-18||/M
は2014-11-30T23:59:59.999
に切り上げられ、全月が含まれます。
time_zone パラメータを使用した例クエリ
time_zone
パラメータを使用して、date
値を UTC オフセットを使用して UTC に変換できます。たとえば:
Php
$params = [
'body' => [
'query' => [
'range' => [
'timestamp' => [
'time_zone' => '+01:00',
'gte' => '2020-01-01T00:00:00',
'lte' => 'now',
],
],
],
],
];
$response = $client->search($params);
Python
resp = client.search(
query={
"range": {
"timestamp": {
"time_zone": "+01:00",
"gte": "2020-01-01T00:00:00",
"lte": "now"
}
}
},
)
print(resp)
Ruby
response = client.search(
body: {
query: {
range: {
timestamp: {
time_zone: '+01:00',
gte: '2020-01-01T00:00:00',
lte: 'now'
}
}
}
}
)
puts response
Go
res, err := es.Search(
es.Search.WithBody(strings.NewReader(`{
"query": {
"range": {
"timestamp": {
"time_zone": "+01:00",
"gte": "2020-01-01T00:00:00",
"lte": "now"
}
}
}
}`)),
es.Search.WithPretty(),
)
fmt.Println(res, err)
Js
const response = await client.search({
query: {
range: {
timestamp: {
time_zone: "+01:00",
gte: "2020-01-01T00:00:00",
lte: "now",
},
},
},
});
console.log(response);
コンソール
GET /_search
{
"query": {
"range": {
"timestamp": {
"time_zone": "+01:00",
"gte": "2020-01-01T00:00:00",
"lte": "now"
}
}
}
}
date 値が +01:00 の UTC オフセットを使用することを示します。 |
|
UTC オフセットが +01:00 の場合、Elasticsearch はこの日付を2019-12-31T23:00:00 UTC に変換します。 |
|
time_zone パラメータは now 値に影響を与えません。 |