V2から追加された IntAttr、StrAttrの挙動について調べました。
フィルタを使った絞り込み
フィルタを使い場合は、setFilterにフィルタ条件を設定します。
request.setFilter("int_attr=10000 AND str_attr=\"あああ\"");
全体のソースは、【検索編】を参照してください。
IntAttr の検証
int_attr フィールドは、>、>=、<、<=、= の演算子をサポートしています。
request.setFilter("int_attr=10000");
IntAttrの値が10,000の情報がヒットします。
request.setFilter("int_attr<10000");
IntAttrの値が10,000未満の情報がヒットします。
request.setFilter("int_attr>10000");
IntAttrの値が10,000より大きい情報と、設定されていない(NULL)のデータがヒットします。
設定されていない値が取れてしまうのは注意が必要ですね。
request.setFilter("int_attr>=10000 AND int_attr<=20000");
IntAttrの値が10,000以上、20,000以下のデータがヒットします。
request.setFilter("int_attr=");
エラーが返されます。値は設定する必要があります。
request.setFilter("int_attr<0");
0件のヒットです。整数しか設定できないので何もヒットしません。
request.setFilter("int_attr=30 OR int_attr=100000");
IntAttrの値が30か100,000の情報がヒットします。
request.setFilter("int_attr="+Integer.MAX_VALUE);
IntAttrを設定していない情報がヒット。どうやら、登録時にIntAttrを省略するとIntegerの最大値が設定されるようです。
StrAttr の検証
str_attr フィールドは、=、!= の演算子をサポートしています。
request.setFilter("str_attr=\"家具\"");
"家具"に完全一致した情報がヒット。"家具、机"を設定した情報はヒットしなかった。
request.setFilter("str_attr!=\"家具:本棚\"");
"家具"に完全一致するもの以外と、StrAttrを設定していない情報がヒットする。
request.setFilter("str_attr=\"\"");
StrAttrの設定がされていない情報のみヒット。
まとめ
フィルタ条件が設定されていないデータについての挙動は考慮する必要があります。それぞれ上記の内容で取得する事はできるのでフィルタ条件に設定してみてください。
また、複数の条件を"AND"と"OR"を使う事で設定する事ができます。IntAttrとStrAttrも同時にフィルタ可能です。