BoxWorks 2024でコンテンツとAIの可能性について紹介します。

詳細を表示

検索

ガイド 検索

検索

Box APIを使用すると、ファイルコンテンツ検索クエリを使用してBox内のコンテンツを見つけることができます。Box検索APIは、サポート対象のすべてのSDKとCLIで使用できます。

cURL
curl -i -X GET "https://api.box.com/2.0/search?query=sales" \
     -H "authorization: Bearer <ACCESS_TOKEN>"
TypeScript Gen
await client.search.searchForContent({
  ancestorFolderIds: ['0' as string],
  mdfilters: [
    {
      filters: {
        ['stringField']: 'stringValue',
        ['dateField']: {
          lt: dateTimeFromString('2035-01-01T00:00:00Z'),
          gt: dateTimeFromString('2035-01-03T00:00:00Z'),
        } satisfies MetadataFieldFilterDateRange,
        ['floatField']: {
          lt: 9.5,
          gt: 10.5,
        } satisfies MetadataFieldFilterFloatRange,
        ['enumField']: 'enumValue2',
        ['multiSelectField']: ['multiSelectValue1', 'multiSelectValue2'],
      },
      scope: 'enterprise' as MetadataFilterScopeField,
      templateKey: templateKey,
    } satisfies MetadataFilter,
  ],
} satisfies SearchForContentQueryParams);
Python Gen
client.search.search_for_content(
    ancestor_folder_ids=["0"],
    mdfilters=[
        MetadataFilter(
            filters={
                "stringField": "stringValue",
                "dateField": MetadataFieldFilterDateRange(
                    lt=date_time_from_string("2035-01-01T00:00:00Z"),
                    gt=date_time_from_string("2035-01-03T00:00:00Z"),
                ),
                "floatField": MetadataFieldFilterFloatRange(lt=9.5, gt=10.5),
                "enumField": "enumValue2",
                "multiSelectField": ["multiSelectValue1", "multiSelectValue2"],
            },
            scope=MetadataFilterScopeField.ENTERPRISE.value,
            template_key=template_key,
        )
    ],
)
Java
// Find the first 10 files matching "taxes"
long offsetValue = 0;
long limitValue = 10;
BoxSearch boxSearch = new BoxSearch(api);
BoxSearchParameters searchParams = new BoxSearchParameters();
searchParams.setQuery("taxes");
searchParams.setType("file");
PartialCollection<BoxItem.Info> searchResults = boxSearch.searchRange(offsetValue, limitValue, searchParams);
Python
items = client.search().query(query='TEST QUERY', limit=100, file_extensions=['pdf', 'doc'])
for item in items:
    print(f'The item ID is {item.id} and the item name is {item.name}')
.NET
// Search for PDF or Word documents matching "Meeting Notes"
BoxCollection<BoxItem> results = await client.SearchManager
    .QueryAsync("Meeting Notes", fileExtensions: new { "pdf", "docx" });
Node
// Search for PDF or Word documents matching "Mobile"
client.search.query(
	'Mobile',
	{
		fields: 'name,modified_at,size,extension,permissions,sync_state',
		file_extensions: 'pdf,doc',
		limit: 200,
		offset: 0
	})
	.then(results => {
		/* results -> {
			total_count: 1,
			entries: 
			[ { type: 'file',
				id: '11111',
				sequence_id: '1',
				etag: '1',
				sha1: 'f89d97c5eea0a68e2cec911s932eca34a52355d2',
				name: 'Box for Sales - Empowering Your Mobile Worker White paper 2pg (External).pdf',
				description: '',
				size: 408979,
				path_collection: 
					{ total_count: 2,
					entries: 
					[ { type: 'folder',
						id: '0',
						sequence_id: null,
						etag: null,
						name: 'All Files' },
						{ type: 'folder',
						id: '22222',
						sequence_id: '1',
						etag: '1',
						name: 'Marketing Active Work' } ] },
				created_at: '2014-05-17T12:59:45-07:00',
				modified_at: '2014-05-17T13:00:20-07:00',
				trashed_at: null,
				purged_at: null,
				content_created_at: '2014-05-17T12:58:58-07:00',
				content_modified_at: '2014-05-17T12:58:58-07:00',
				created_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				modified_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				owned_by: 
					{ type: 'user',
					id: '33333',
					name: 'Example User',
					login: 'user@example.com' },
				shared_link: null,
				parent: 
					{ type: 'folder',
					id: '22222',
					sequence_id: '1',
					etag: '1',
					name: 'Marketing Active Work' },
				item_status: 'active' } ],
			limit: 200,
			offset: 0 }
		*/
	});
iOS
let iterator = client.search.query(query: "Quarterly Business Review")
iterator.next { results in
    switch results {
    case let .success(page):
        for item in page.entries {
            switch item {
            case let .file(file):
                print("- File \(file.name) (ID: \(file.id))")
            case let .folder(folder):
                print("- Folder \(file.name) (ID: \(file.id))")
            case let .webLink(webLink):
                print("- Web Link \(file.name) (ID: \(file.id))")
            }
        }

    case let .failure(error):
        print(error)
    }
}

検索APIで使用できる各種機能の詳細については、リファレンスドキュメントを参照してください。

クエリ演算子

検索APIは、ANDORNOT""など、いくつかの検索演算子をサポートします。これらの演算子を使用すると、より複雑な組み合わせの検索語に一致する項目のみが返されるように検索結果を絞り込むことができます。

curl -i -X GET "https://api.box.com/2.0/search?query=box%20AND%20sales" \
    -H "Authorization: Bearer <ACCESS_TOKEN>"

論理演算子の使用の詳細を確認する

検索インデックス作成

Boxは、Boxに格納されているファイルまたはフォルダの検索インデックスを保持します。ファイルまたはフォルダが変更されるたびに、これらの単語がインデックスに追加されます。検索が実行されると、APIは、検索インデックスで、クエリに一致するファイルやフォルダを探します。Box内でコンテンツが追加、更新、または削除されると、それに応じて検索インデックスが更新されます。

Boxの検索インデックスの詳細を確認する

10分経過してもインデックスが更新されない場合もあります。このような場合は、Boxサポートに問い合わせて問題を解決することをお勧めします。

ファイルコンテンツ検索が無効になっている企業 (たとえば、KeySafeをご利用のお客様) の場合、ドキュメント内の文字を検索できません。ファイルコンテンツ検索が無効の状態でドキュメントを調べる必要がある場合は、アカウントチームまでお問い合わせください。

メタデータクエリとの比較

一見、検索クエリAPIはメタデータクエリAPIとよく似ていますが、動作には重要な違いがいくつかあります。大まかに言うと、メタデータクエリは正確さとスループットの向上のために最適化されているのに対し、通常の検索は、人間のユーザーとの関連度のために最適化されています。

メタデータクエリAPI検索API
インデックスの作成対象このAPIでは、検索対象のメタデータテンプレートの値に基づいてファイル/フォルダのみが返されます。このAPIでは、項目名、説明、コンテンツ (最初の10,000バイトまで) の値のほか、関連付けられたメタデータテンプレートインスタンスに基づいてファイル、フォルダ、ウェブリンクが返されます。
インデックス作成時間このAPIでは、ファイルまたはフォルダのメタデータが追加、削除、更新されるとすぐに正確な結果が返されます。このAPIは、検索インデックスの作成が遅延すると、その影響を受けます。この遅延は通常10分ですが、場合によっては長くなることがあります。つまり、メタデータが更新されてから10分を経過しても項目が返されない場合があります。
一致このAPIでは、SQLの規則に基づいて完全一致が使用されます。結果は、指定した並べ替え順を基に返されます。このAPIでは、あいまい一致が使用されるため、文字列のトークン化、特殊文字の削除、およびその他の検索コンセプトに基づいて異なる結果が返される場合があります。結果の順序は、項目の関連度または更新日に基づいています。
条件付きロジックこのAPIは、比較演算子を使用するマルチパートブール式をサポートします。このAPIでは、メタデータによるクエリのサポートが限定的です。サポートされるのは、一度に1つのメタデータテンプレートに対するクエリのみで、単純なクエリ操作のみが可能です。
レスポンスタイプこのAPIでは、一致したファイル/フォルダと、クエリによって一致した関連するメタデータの両方が返されます。このAPIで返されるのは、一致した項目のみです。各項目のメタデータを返すには、後続のAPIコールが必要です。
スループット (Throughput)このAPIには現在、ユーザーごとのレート制限のほか、企業あたりのリクエスト数が10件/秒という制限があります。このAPIでは、1ユーザーあたりの検索数は6件/秒、企業あたりの検索数は最大60件/分および12件/秒がサポートされています。
規模このAPIでは、指定したメタデータテンプレートを使用して返される項目数に制限はありません。一致する結果が2,000件以下になるクエリのみを送信することをお勧めします。このAPIには、指定したメタデータテンプレートを使用して返される項目数に制限はありません。ただし、検索に一致する項目数が増えるにつれ、レスポンス時間が大幅に増大します。このAPIでは、1つのクエリに対する結果は1,000万件までという制限があります。一致する結果が50,000件以下になるクエリのみを送信することをお勧めします。
スコープこのAPIは常に、ユーザーがアクセスできるコンテンツに制限されています。このAPIは、ユーザーがアクセスできるコンテンツ (​user_content​) または社内のすべてのコンテンツ (​enterprise_content​) のいずれかに制限される場合があります。

メタデータクエリAPIの詳細を確認する