solr_queryでの日付範囲の使用
CQL型DateRangeTypeはSolr DateRangeFieldにマップされます。
DSE SearchではSolr DateRangeFieldがサポートされており、Solr DateRangeFieldはCQL型DateRangeTypeにマップされます。
CQL型DateRangeTypeは、最新のJavaドライバー、DSE Pythonドライバー、およびcqlshコマンドでの使用がサポートされています。
検索クエリーのデフォルトのTimeZone(UTC)のオーバーライド
日付計算の加算や丸めに使用されるデフォルトのTimeZone(UTC)を上書きするには、TZパラメーターを指定します。指定したタイム・ゾーンに夏時間(DST)の開始や終了を含むローカル規則がある場合は、それらの規則に従ってそれぞれ任意の日がいつ開始されるかが決定されます。タイム・ゾーン規則は、DAYの丸めや加算に影響し、HOUR、MIN、MONTH、およびYEARの丸めにもカスケードします。たとえば、異なるタイム・ゾーンを指定すると結果が変わります。
TZパラメーターの値は、java TimeZoneクラスでサポートされているゾーンIDです。
日付計算 | 結果 |
---|---|
2016-03-10T12:34:56Z/YEAR |
デフォルトのTZ
|
TZ=America/Los_Angeles
|
|
2016-03-10T08:00:00Z+1DAY |
デフォルトのTZ
|
TZ=America/Los_Angeles
|
プライマリ・キーまたは一般カラム
DateRangeTypeはプライマリ・キーまたは一般カラムとして使用できます。
CREATE TABLE taxi_trips(id int PRIMARY KEY, pickup_dropoff_range 'DateRangeType');
CREATE TABLE weather_sensors(weatherstation_id text, event_time 'DateRangeType', temperature text, PRIMARY KEY (weatherstation_id,event_time));
CQL表現
CQL表現では、Solr DateRangeFieldと同じ構文を使用します。
INSERT INTO taxi_trips(id, pickup_dropoff_range) VALUES (1, '[2017-02-02T14:57:00 TO 2017-02-02T15:10:17]');
INSERT INTO taxi_trips(id, pickup_dropoff_range) VALUES (2, '[2017-02-01T09:00:03 TO 2017-02-01T09:32:00.001]');
INSERT INTO taxi_trips(id, pickup_dropoff_range) VALUES (3, '[2017-02-03T12:10:01.358 TO 2017-02-03T12:19:57]');
dateTime精度
dateTime精度は、ユーザー入力から保護されています。ミリ秒は、入力でミリ秒精度が提供されている場合のみ表示されます。
SELECT * FROM taxi_trips;
id | pickup_dropoff_range
----+----------------------------------------------------
1 | [2017-02-02T14:57:00Z TO 2017-02-02T15:10:17Z]
2 | [2017-02-01T09:00:03Z TO 2017-02-01T09:32:00.001Z]
3 | [2017-02-03T12:10:01.358Z TO 2017-02-03T12:19:57Z]
検索インデックスを作成します。
CREATE SEARCH INDEX ON taxi_trips ;
2017年2月以降のすべての旅行を選択します。
SELECT * FROM taxi_trips WHERE solr_query = 'pickup_dropoff_range:2017-02';
2017-02-01 12:00 PM以降に開始され2017-02-02以前に終了したすべての旅行を選択します。
SELECT * FROM taxi_trips WHERE solr_query = 'pickup_dropoff_range:[2017-02-01T12 TO 2017-02-02]';
2017-02-01 12:00 PM以降に開始され、2017-02-01:23:59:59.999以前に終了したすべての旅行を選択します。
SELECT * FROM taxi_trips WHERE solr_query = 'pickup_dropoff_range:[2017-02-01T12 TO 2017-02-01]';
1つの特定時点
DateRangeFieldは1つの特定時点を表すことができます。
INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '2017-10-02T00:00:05', '12C'); INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '2017-10-02T00:00:10', '12C'); INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '2017-10-02T00:00:15', '13C'); INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '2017-10-02T00:00:20', '13C'); INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '2017-10-02T00:00:25', '12C');weather_sensorsのすべてを選択します。
SELECT * FROM weather_sensors;
weatherstation_id | event_time | temperature
----_--------------+----------------------+-------------
A1 | 2017-10-02T00:00:05Z | 12C
A1 | 2017-10-02T00:00:10Z | 12C
A1 | 2017-10-02T00:00:15Z | 13C
A1 | 2017-10-02T00:00:20Z | 13C
A1 | 2017-10-02T00:00:25Z | 12C
weather_sensorsで検索インデックスを作成します。
CREATE SEARCH INDEX ON weather_sensors ;
1つの特定時点を選択します。
SELECT * FROM weather_sensors WHERE solr_query = 'event_time:[2017-10-02T00:00:10 TO 2017-10-02T00:00:20]';
weatherstation_id | event_time | solr_query | temperature
-------------------+----------------------+------------+-------------
A1 | 2017-10-02T00:00:10Z | null | 12C
A1 | 2017-10-02T00:00:15Z | null | 13C
A1 | 2017-10-02T00:00:20Z | null | 13C
開境界
DateRangeFieldには開境界を指定できます。
特定時点から開境界まで選択します。
SELECT * FROM weather_sensors WHERE solr_query = 'event_time:[2017-10-02T00:00:10 TO *]';
weatherstation_id | event_time | solr_query | temperature
-------------------+----------------------+------------+-------------
A1 | 2017-10-02T00:00:25Z | null | 12C
A1 | 2017-10-02T00:00:10Z | null | 12C
A1 | 2017-10-02T00:00:15Z | null | 13C
A1 | 2017-10-02T00:00:20Z | null | 13C
開境界から特定時点まで選択します。
SELECT * FROM weather_sensors WHERE solr_query = 'event_time:[* TO 2017-10-02T00:00:20]';
weatherstation_id | event_time | solr_query | temperature
-------------------+----------------------+------------+-------------
A1 | 2017-10-02T00:00:10Z | null | 12C
A1 | 2017-10-02T00:00:15Z | null | 13C
A1 | 2017-10-02T00:00:20Z | null | 13C
A1 | 2017-10-02T00:00:05Z | null | 12C
すべての特定時点から選択します。
SELECT * FROM weather_sensors WHERE solr_query = 'event_time:[* TO *]';
weatherstation_id | event_time | solr_query | temperature
-------------------+----------------------+------------+-------------
A1 | 2017-10-02T00:00:25Z | null | 12C
A1 | 2017-10-02T00:00:10Z | null | 12C
A1 | 2017-10-02T00:00:15Z | null | 13C
A1 | 2017-10-02T00:00:20Z | null | 13C
A1 | 2017-10-02T00:00:05Z | null | 12C
テーブルに開境界の範囲を挿入します。
INSERT INTO weather_sensors (weatherstation_id, event_time, temperature) VALUES ('A1', '[2017-10-02T00:00:25 TO *]', '12C'); SELECT * FROM weather_sensors WHERE solr_query = 'event_time:[* TO *]';
weatherstation_id | event_time | solr_query | temperature
-------------------+-----------------------------+------------+-------------
A1 | 2017-10-02T00:00:25Z | null | 12C
A1 | 2017-10-02T00:00:10Z | null | 12C
A1 | 2017-10-02T00:00:15Z | null | 13C
A1 | 2017-10-02T00:00:20Z | null | 13C
A1 | 2017-10-02T00:00:05Z | null | 12C
A1 | [2017-10-02T00:00:25Z TO *] | null | 12C