検索機能の使い方

ここでは検索機能を利用する方法を解説します。

基本

検索はFilter queryという機能を利用します。Filter queryはSQLに似た記述で検索条件を指定できます。

たとえばtimestampというフィールドについて、2021年06月01日から6月30日までのデータを検索する場合には次のように指定します。

?filter=%28timestamp+%3E%3D+%222021-06-01+00%3A00%22+AND+timestamp+%3C%3D+%222021-06-30+23%3A59%22%29

この filter パラメータは次のような内容をURLエンコードしたものです。

?filter=(timestamp >= "2021-06-01 00:00" AND timestamp <= "2021-06-30 23:59")

filterパラメータについて

filterパラメータは基本的に次のような形で構成されます。

(カラム) (オペレータ) (値)

  • カラムはデータで定義したものを指定します。上記例では timestamp になります。
  • オペレータはカラムと値をつなぐものです。たとえば =>= などになります(後述)。
  • 値は検索条件値になります。文字列や数字が利用できます。

相対日付モードについて

今日や昨日、何時間前といった相対的に日時を扱って検索を行うモードを用意しています。基本形は次のようになります。

(カラム) (オペレータ):relatively (値)

カラムやオペレータについては、通常のfilterパラメータと同じです(一部利用できないオペレータがあります)。たとえば次のように検索することで、今日のデータだけを取得できます。

timestamp >=:relatively "today"

指定できるオペレータと値については相対日付モードで指定できるオペレータと値を参照してください。

オペレータについて

Filter queryで利用できるオペレータは次の通りです。

オペレータ意味備考
=カラム であるtopics_id = 1= の代わりに eq も利用可能です
!=カラム ではないext_col_01 != ""!= の代わりに ne も利用可能です
<カラム より小さいinst_ymdhi < "2020-08-01"< の代わりに lt も利用可能です
<=カラム 以下であるinst_ymdhi <= "2020-08-01"<= の代わりに lte も利用可能です
>カラム より大きいtopics_group_id > 2> の代わりに gt も利用可能です
>=カラム 以上であるtopics_group_id >= 2>= の代わりに gte も利用可能です
inカラム のいずれかが含まれるext_col_01 in ["A", "B", "C"]
ninカラム のいずれも含まれないext_col_01 nin ["A", "B", "C"]
allカラム すべてが含まれるsecure_level all [1, 2]値は配列である必要があります
nallカラム すべてが含まれないsecure_level nall [1, 2]値は配列である必要があります
containsカラム が含まれるsubject contains "foo"大文字小文字を区別しません
icontainsカラム が含まれるsubject icontains "foo"大文字小文字を区別します
ncontainsカラム が含まれないsubject ncontains "bar"大文字小文字を区別しません
nincontainsカラム が含まれないsubject nincontains "bar"大文字小文字を区別します
startswithカラム ではじまるsubject startswith "foo"大文字小文字を区別しません
istartswithカラム ではじまるsubject istartswith "foo"大文字小文字を区別します
nstartswithカラム ではじまらないsubject nstartswith "foo"大文字小文字を区別しません
istartswithカラム ではじまらないsubject nistartswith "foo"大文字小文字を区別します
endswithカラム で終わるsubject endswith "foo"大文字小文字を区別しません
iendswithカラム で終わるsubject iendswith "foo"大文字小文字を区別します
nendswithカラム で終わらないsubject nendswith "foo"大文字小文字を区別しません
niendswithカラム で終わらないsubject niendswith "foo"大文字小文字を区別します

オペレータの連結について

複数の条件を指定する場合には ANDOR が利用できます。

オペレータ意味
AND条件1条件2 にマッチするtopics_id eq 1 AND subject eq foo
OR条件1条件2 のいずれかにマッチするtopics_id eq 1 OR subject eq foo

他の記法

他に括弧などの記法が用意されています。

オペレータ意味
()条件の優先順位付けtopics_id eq 1 AND (subject eq foo OR subject eq bar)
[]値の配列化topics_id in [1, 2, 3]
,値の配列区切り文字topics_id in [1, 2, 3]

値について

種類フォーマット備考
整数%dtopics_id eq 1
数値%ftopics_id > 1.00
日付"Y-m-d"inst_ymdhi < "2020-08-01"
時間"H:m:s"
"H:m"
post_time > "12:30:00"
"H:m" post_time > "12:30"
日時"Y-m-d H:i"
"Y-m-d H:i:s"
"Y-m-d H:i:s O"
update_ymdhi < "2020-08-01 12:00"
update_ymdhi < "2020-08-01 12:00:00"
update_ymdhi < "2020-08-01 12:00:00 +0900"
日付 + 時間"Y/m/d H:i:s"ymd_time > "2021/09/30 12:30:00"コンテンツ定義の「投稿時間も設定する」フィールドで、「有効にする」にチェックが入っている場合のみ利用できます。
参考:コンテンツ定義編集
空文字""ext_col_01 eq ""
文字列"%s"
%s
subject eq "TITLE"
subject eq TITLE
ダブルクオート " で囲んだ場合は日付/時刻/日時を除いて文字列として扱われます。
ダブルクオートがない場合、他の型と一致せず、かつ空白や特殊文字がない場合は文字列として扱われます。

相対日付モードで指定できるオペレータと値

相対日付モードで指定できるオペレータ

相対日付モードで指定できるオペレータは次の通りです。

オペレータ意味
=:relatively値に一致するtimestamp =:relatively "today"
!=:relatively値に一致しないtimestamp !=:relatively "today"
>:relatively値より大きいtimestamp >:relatively "-9 hours"
>=:relatively値以上timestamp >=:relatively "-10 hours"
<:relatively値より小さいtimestamp <:relatively "1 week"
<=:relatively値以下timestamp <=:relatively "last Monday"

相対日付モードで指定できる値

相対日付モードはPHPのstrtotime関数互換となっています。strtotime関数で利用できる指定方式が指定可能です。

利用できる書式は次の通りです(PHP: 相対的な書式 - Manualからの転載です)。

シンボル書式
dayname'sunday' | 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'
daytext'weekday' | 'weekdays'
number[+-]?[0-9]+
ordinal'first' | 'second' | 'third' | 'fourth' | 'fifth' | 'sixth' | 'seventh' | 'eighth' | 'ninth' | 'tenth' | 'eleventh' | 'twelfth' | 'next' | 'last' | 'previous' | 'this'
reltext'next' | 'last' | 'previous' | 'this'
space[ \t]+
unit(('sec' | 'second' | 'min' | 'minute' | 'hour' | 'day' | 'fortnight' | 'forthnight' | 'month' | 'year') 's'?) | 'weeks' | daytext

入力例は次の通りです。

書式説明
'yesterday'昨日の00:00:00"yesterday 14:00"
'midnight'時刻を00:00:00にします
'today'時刻を00:00:00にします
'now'
'noon'時刻を12:00:00にします"yesterday noon"
'tomorrow'明日の00:00:00
'back of' hour指定された時の15分後"back of 7pm", "back of 15"
'front of' hour指定された時の15分前"front of 5am", "front of 23"
'first day of'現在月の最初の日にします。 この書式に続けて月名を指定する使いかたが最適です。"first day of January 2008"
'last day of'現在月の最後の日にします。 この書式に続いて月名を指定する使いかたが最適です。"last day of next month"
ordinal space dayname space 'of'現在月のx番目の曜日を計算します。"first sat of July 2008"
'last' space dayname space 'of'現在月の 最後の 曜日を計算します。"last sat of July 2008"
number space? (unit | 'week')値を数値で指定するような、相対的な時間指定を処理します。"+5 weeks", "12 day", "-7 weekdays"
ordinal space unit値を英単語で指定するような、相対的な時間指定を処理します。"fifth day", "second month"
'ago'直前に指定された相対的な時間指定について、正負反転します。"2 days ago", "8 days ago 14:00", "2 months 5 days ago", "2 months ago 5 days", "2 days ago"
dayname現在からみて次にやってくる、指定された曜日にします。"Monday"
reltext space 'week'特別な書式 "weekday + last/this/next week" を処理します。"Monday next week"

orderパラメータについて

order パラメータは結果の並び順を指定します。 フィールド名=(昇順 or 降順) という形式になります。

昇順

昇順(最初が小さいデータ、徐々に大きくなる)はASCになります。書き方としては timestamp=ASC のように書きます。

降順

降順(最初が大きいデータ、徐々に小さくなる)はDESCになります。書き方としては timestamp=DESC のように書きます。

その他のパラメータについて

その他、検索実行時に指定できるパラメータは次の通りです。

パラメータ名意味
pageID何ページ目を返すかの指定pageID=1
perPage1ページあたりの結果件数perPage=20

お探しのページは見つかりましたか?解決しない場合は、問い合わせフォームからお問い合わせいただくか、Slackコミュニティにご参加ください。