> ## Documentation Index
> Fetch the complete documentation index at: https://developer.box.com/llms.txt
> Use this file to discover all available pages before exploring further.

# メタデータクエリフィルタ

export const Link = ({href, children, className, ...props}) => {
  const localizedHref = localizeLink(href);
  return <a href={localizedHref} className={className} {...props}>
      {children}
    </a>;
};

<Link href="/reference/get-search">`GET /search`</Link> APIでは、関連付けられたメタデータを使用して、検索結果にフィルタをかけることができます。`mdfilters`クエリパラメータを使用すると、開発者はメタデータテンプレートとクエリの対象となる値を指定できます。

<CodeGroup>
  ```sh cURL theme={null}
  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>"
  ```

  ```java Java theme={null}
  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);
  ```

  ```csharp .NET theme={null}
  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);
  ```

  ```python Python theme={null}
  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)
  ```

  ```js Node theme={null}
  client.search.query(
      'sales',
      {
          mdfilters: [
              {
                  scope: 'enterprise',
                  templateKey: 'contract',
                  filters: {
                      category: 'online'
                  }
              }
          ]
      })
      .then(results => {
          // ...
      });
  ```
</CodeGroup>

<Info>
  この例では、`enterprise.contract`メタデータが追加され、`category`フィールドが`online`に設定されている項目によって、クエリ`sales`に一致するコンテンツの検索にフィルタをかけます。
</Info>

## メタデータの概要

メタデータを使用すると、ユーザーやアプリケーションは、ファイルやフォルダに関連付けられたカスタムデータを定義、格納できます。

<Frame border center>
  <img src="https://mintcdn.com/box/Or-P29MSx7z0-Y8K/ja/guides/metadata/metadata-example.png?fit=max&auto=format&n=Or-P29MSx7z0-Y8K&q=85&s=9b6c637f75199d06960ae13479746756" alt="文字列フィールド" width="1145" height="790" data-path="ja/guides/metadata/metadata-example.png" />
</Frame>

メタデータは、ファイルまたはフォルダに割り当てられているキー/値ペアで構成されます。たとえば、重要な契約には、`clientNumber: 820183`と`category: online`のキー/値ペアが使用されている場合があります。

`mdfilters`クエリパラメータを使用すると、開発者は、特定のメタデータが追加されているファイルとフォルダを検索できます。

<Card href={localizeLink("/guides/metadata")} arrow title="メタデータテンプレートおよびインスタンスの詳細を確認する" />

## メタデータフィルタ構文

`mdfilters`パラメータに現在指定できるフィルタは1つだけですが、今後拡張される可能性があります。

各フィルタでは、フィルタをかけるメタデータテンプレートの`scope`および`templateKey`を定義します。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {}
  }
]
```

<Info>
  テンプレートの`scope`と`templateKey`を取得するには、会社の<Link href="/guides/metadata/templates/list">すべてのメタデータテンプレートのリストを取得</Link>するか、<Link href="/guides/metadata/instances/list">項目のすべてのメタデータインスタンスのリストを取得</Link>します。
</Info>

テンプレートが定義されると、`filters`フィールドではいくつかの異なるフィルタ形式が受け入れられます。フィルタの形式は、フィルタとして使用するフィールドのタイプによって大きく異なります。

### `string`フィールドによるフィルタ

`string`タイプのフィールドでフィルタをかけるには、フィルタでフィールドの`key`と、項目を検索する際に目的となる値を定義する必要があります。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {
      "category": "online"
    }
  }
]
```

<Info>
  この例では、`enterprise.contract`テンプレートのインスタンスが適用されていて、キー`category`のフィールドが値`online`に設定されているすべてのファイルとフォルダが検索されます。
</Info>

### `float`フィールドによるフィルタ

`float`タイプのフィールドでフィルタをかけるには、`gt` (より大きい) や `lt` (より小さい) の値を指定して範囲を定義する必要があります。厳密な値を検索する場合は、`gt`と`lt`の両方に同じ値を入力できます。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {
      "amount": {
        "gt": 10000,
        "lt": 20000
      }
    }
  }
]
```

この例では、`enterprise.contract`テンプレートのインスタンスが適用されていて、キー`amount`のフィールドが`10000`以上`2000`以下の値に設定されているすべてのファイルおよびフォルダが検索されます。`gt`と`lt`はその値を含むことと、必ずしも両方を設定する必要がないことに注意してください。

<Info>
  数値に基づいてクエリを作成する場合は、-16777215～+16777215の範囲を超えないようにしてください。数値属性を使用したメタデータ検索では、インデックス値がFLOAT32として保存されます。結果として、-16777215～+16777215の整数は正確に表すことができます。この範囲外の数値を扱う処理では、精度が失われる場合があります。
</Info>

### `date`フィールドによるフィルタ

`date`タイプのフィールドでフィルタをかけるには、フィルタでフィールドの`key`と、項目の検索対象範囲を定義する必要があります。この範囲を定義するには、`gt` (より大きい) と`lt` (より小さい) の値を指定します。`gt`と`lt`はその値を含むことに注意してください。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {
      "expirationDate": {
        "gt": "2016-08-01T00:00:00Z",
        "lt": "2017-08-01T00:00:00Z"
      }
    }
  }
]
```

<Info>
  この例では、`enterprise.contract`テンプレートのインスタンスが適用されていて、`expirationDate`が`2016-08-01T00:00:00Z`から`2017-08-01T00:00:00Z`までの日付に設定されているファイルとフォルダがすべて検索されます。
</Info>

### `enum`フィールドによるフィルタ

`enum`タイプのフィールドでフィルタをかけるには、フィルタでフィールドの`key`と、項目を検索する際に目的となる値を定義する必要があります。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {
      "category": "online"
    }
  }
]
```

<Info>
  この例では、`enterprise.contract`テンプレートのインスタンスが適用されていて、キー`category`のフィールドが値`online`に設定されているすべてのファイルとフォルダが検索されます。
</Info>

### `multiSelect`フィールドによるフィルタ

`multiSelect`タイプのフィールドでフィルタをかけるには、フィルタでフィールドの`key`と、項目の検索で対象とする可能性がある値を定義する必要があります。検索を実行すると、クエリでは基本的に`OR`演算が実行され、指定した値のいずれかがこのフィールドと一致するテンプレートが取得されます。

```json theme={null}
[
  {
    "scope": "enterprise",
    "templateKey": "contract",
    "filters": {
      "category": [
        "online",
        "enterprise"
      ]
    }
  }
]
```

<Info>
  この例では、`enterprise.contract`テンプレートのインスタンスが適用されていて、キー`category`のフィールドが値`online`または`enterprise`に設定されているすべてのファイルとフォルダが検索されます。
</Info>
