メタデータクエリフィルタ
メタデータクエリフィルタ
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"
]
}
}
]