メタデータクエリフィルタ
メタデータクエリフィルタ
GET /search APIでは、関連付けられたメタデータを使用して、検索結果にフィルタをかけることができます。mdfiltersクエリパラメータを使用すると、開発者はメタデータテンプレートとクエリの対象となる値を指定できます。
curl -i -X GET "https://api.box.com/2.0/search?query=sales&mdfilters=%5B%7B%22scope%22%3A%22enterprise%22%2C%22templateKey%22%3A%22contract%22%2C%22filters%22%3A%7B%22category%22%3A%22online%22%7D%7D%5D" \
-H "Authorization: Bearer <ACCESS_TOKEN>"
long offsetValue = 0;
long limitValue = 10;
BoxSearch boxSearch = new BoxSearch(api);
BoxSearchParameters searchParams = new BoxSearchParameters();
searchParams.setQuery("sales");
BoxMetadataFilter bmf = new BoxMetadataFilter();
bmf.setScope("enterprise");
bmf.setTemplateKey("contract");
bmf.setFilter("category", "online")
searchParams.setMetadataFilter(bmf)
PartialCollection<BoxItem.Info> searchResults = boxSearch.searchRange(offsetValue, limitValue, searchParams);
var filter = new
{
category = "online"
};
var filters = new List<BoxMetadataFilterRequest>()
{
new BoxMetadataFilterRequest()
{
Scope = "enterprise",
TemplateKey = "contract",
Filters: filter
}
};
BoxCollection<BoxItem> results = await client.SearchManager
.QueryAsync("sales", mdFilters: filters);
from boxsdk.object.search import MetadataSearchFilter, MetadataSearchFilters
metadata_search_filter = MetadataSearchFilter(scope='enterprise', template_key='contract')
metadata_search_filter.add_value_based_filter(field_key='category', value='online')
metadata_search_filters = MetadataSearchFilters()
metadata_search_filters.add_filter(metadata_search_filter)
client.search().query("sales", metadata_filters=metadata_search_filters)
client.search.query(
'sales',
{
mdfilters: [
{
scope: 'enterprise',
templateKey: 'contract',
filters: {
category: 'online'
}
}
]
})
.then(results => {
// ...
});
メタデータの概要
メタデータを使用すると、ユーザーやアプリケーションは、ファイルやフォルダに関連付けられたカスタムデータを定 義、格納できます。
メタデータは、ファイルまたはフォルダに割り当てられているキー/値ペアで構成されます。たとえば、重要な契約には、clientNumber: 820183とcategory: onlineのキー/値ペアが使用されている場合があります。
mdfiltersクエリパラメータを使用すると、開発者は、特定のメタデータが追加されているファイルとフォルダを検索できます。
メタデータテンプレートおよびインスタンスの詳細を確認する
メタデータフィルタ構文
mdfiltersパラメータに現在指定できるフィルタは1つだけですが、今後拡張される可能性があります。
各フィルタでは、フィルタをかけるメタデータテンプレートのscopeおよびtemplateKeyを定義します。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {}
}
]
テンプレートが定義されると、filtersフィールドではいくつかの異なるフィルタ形式が受け入れられます。フィルタの形式は、フィルタとして使用するフィールドのタイプによって大きく異なります。
stringフィールドによるフィルタ
stringタイプのフィールドでフィルタをかけるには、フィルタでフィールドのkeyと、項目を検索する際に目的となる値を定義する必要があります。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {
"category": "online"
}
}
]
floatフィールドによるフィルタ
floatタイプのフィールドでフィルタをかけるには、gt (より大きい) や lt (より小さい) の値を指定して範囲を定義する必要が あります。厳密な値を検索する場合は、gtとltの両方に同じ値を入力できます。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {
"amount": {
"gt": 10000,
"lt": 20000
}
}
}
]
この例では、enterprise.contractテンプレートのインスタンスが適用されていて、キーamountのフィールドが10000以上2000以下の値に設定されているすべてのファイルおよびフォルダが検索されます。gtとltはその値を含むことと、必ずしも両方を設定する必要がないことに注意してください。
dateフィールドによるフィルタ
dateタイプのフィールドでフィルタをかけるには、フィルタでフィールドのkeyと、項目の検索対象範囲を定義する必要があります。この範囲を定義するには、gt (より大きい) とlt (より小さい) の値を指定します。gtとltはその値を含むことに注意してください。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {
"expirationDate": {
"gt": "2016-08-01T00:00:00Z",
"lt": "2017-08-01T00:00:00Z"
}
}
}
]
enumフィールドによるフィルタ
enumタイプのフィールドでフィルタをかけるには、フィルタでフィールドのkeyと、項目を検索する際に目的となる値を定義する必要があります。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {
"category": "online"
}
}
]
multiSelectフィールドによるフィルタ
multiSelectタイプのフィールドでフィルタをかけるには、フィルタでフィールドのkeyと、項目の検索で対象とする可能性がある値を定義する必要があります。検索を実行すると、クエリでは基本的にOR演算が実行され、指定した値のいずれかがこのフィールドと一致するテンプレートが取得されます。
[
{
"scope": "enterprise",
"templateKey": "contract",
"filters": {
"category": [
"online",
"enterprise"
]
}
}
]