# solari instagram content search

> キャプション、クリエイターのbio、動画の文字起こしを横断するキーワード検索。

- **CLI**: `solari instagram content search`
- **MCP ツール**: `solari_instagram_content_search`
- **アクセス権**: `solari:read` — サインイン済みの SOLARI アカウントであれば利用できます。

追跡中の投稿に対する字句キーワード検索。キャプション、クリエイターのbio、動画の文字起こしテキストに照合し（韓国語対応の解析とn-gramによる部分一致）、関連度順にランク付けしてマッチ箇所のハイライトを返します。各itemはpost_id、投稿者のaccount_id/username、caption、文字起こしテキスト、エンゲージメントの各カウント、scoreを持ちます。post_idはsolari_instagram_content_detailまたはsolari_instagram_content_batchに、アカウントの参照はアカウント系ツールに渡してください。カバー範囲はKR、JP、US、TWの各リージョンのみで、およそ直近6か月の投稿を保持します。totalは10,000までは正確で、そこで頭打ちになります。since/until（UTC日付）で絞り込みます。サインイン済みの SOLARI アカウントであれば利用できます。

**どんなときに使うか** — トピックや言い回しから投稿を探すとき。答えが件数になる場合はcontent aggregateをお使いください。

**何が返るか** — 関連度順のヒット。マッチ箇所のハイライト付き。

## パラメータ

- `query` (string, 必須) — キャプション、クリエイターのbio、動画の文字起こしに対して照合するフリーテキストのキーワードクエリ。
- `region` (enum, 任意, 既定値 "KR") — 検索対象のリージョン。インデックスがあるのはこの4リージョンのみ。 値: `KR`, `JP`, `US`, `TW`.
- `limit` (integer, 任意, ≥ 1) — 返すヒットの最大数。デフォルトは20。100を超える値は100に切り詰められます。
- `offset` (integer, 任意, 既定値 0, ≥ 0) — ページネーションのoffset。デフォルトは0。
- `since` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以降の投稿のみ。YYYY-MM-DD形式で、当日を含みます。約6か月より古いデータはインデックスされていません。
- `until` (string, 任意, pattern ^\d{4}-\d{2}-\d{2}$) — このUTC日付以前の投稿のみ。YYYY-MM-DD形式で、当日を含みます。

## レスポンス

### `Response`

- `query / region` (string) — 適用されたqueryとregion。
- `total` (integer) — 一致した総数。10,000までは正確で、それ以降は頭打ちになります。
- `took_ms` (integer) — 検索にかかった時間。
- `items` (object[]) — ヒット。score降順。

### `items[]`

- `post_id` (uuid) — SOLARIのpost id。
- `slug` (string) — Instagramのshortcode。
- `account_id / author_id / username` (string) — 投稿したアカウント。現行の名称はaccount_id。
- `caption` (string) — キャプションのテキスト。
- `user_bio` (string) — 投稿者のbio — 検索対象テキストの一部。
- `transcription_text` (string | null) — 動画の音声の文字起こし。
- `posted_at` (timestamp) — 投稿日時（UTC）。
- `like_count / comment_count` (integer) — エンゲージメントのスナップショット。
- `follower_count` (integer) — 投稿者のフォロワー数。
- `score` (number) — 関連度スコア。このレスポンス内でのみ比較できます。
- `highlight` (object) — フィールドごとの一致した断片: caption、user_bio、transcription_text。
- `is_video` (boolean) — その投稿が動画かどうか。

## 例

```console
$ solari instagram content search query="이니스프리 그린티" limit=3
```

_読みやすさのため、長い文字列と繰り返しの配列要素を省略しています。_

```json
{
  "query": "이니스프리 그린티",
  "region": "KR",
  "total": 10000,
  "took_ms": 1586,
  "items": [
    {
      "post_id": "019f12d8-3e72-78e9-b7e5-39293bc56f23",
      "author_id": "019f12d8-3e0f-7c74-afc6-e14405bd1523",
      "username": "hanydiary",
      "caption": "[이니스프리에디터 4기 1-2 : 그린티 PDRN 아이&립 세럼] #이니스프리 #그린티PDRN 💚 자세한 포스팅은 프로필 링크 참고해주세요 :)",
      "user_bio": "대외활동 | 휴학생 | 취준일기 🪽과 학생회 2년 연임 🪽이니스프리 대학생 에디터 3기 / 4기",
      "transcription_text": null,
      "posted_at": "2026-02-16T05:44:45Z",
      "like_count": 3,
      "comment_count": 3,
      "follower_count": 972,
      "score": 140.43787,
      "slug": "DUzrl1UkoJb",
      "highlight": {
        "caption": [
          "[<mark>이니스프리</mark>에디터 4기 1-2 : <mark>그린티</mark> PDRN 아이&립 세럼] #이니스프리 #그린티PDRN 💚 자세한 포스팅은 프로필 링크 참고해주세요 :)"
        ],
        "user_bio": [
          "대외활동 | 휴학생 | 취준일기 🪽과 학생회 2년 연임 🪽<mark>이니스프리</mark> 대학생 에디터 3기 / 4기"
        ],
        "transcription_text": []
      },
      "is_video": false,
      "media_url": null,
      "thumbnail_url": null,
      "account_id": "019f12d8-3e0f-7c74-afc6-e14405bd1523"
    },
    "… 2 more"
  ]
}
```

## MCP 呼び出しとして

```json
{
  "name": "solari_instagram_content_search",
  "arguments": {
    "query": "이니스프리 그린티",
    "limit": 3
  }
}
```

## 注意点

- インデックスの対象はKR、JP、US、TWのみで、およそ直近6か月を保持します。それより古いsinceを指定すると何も返りません。
- totalは10,000までは正確で、そこで止まります。
- 韓国語対応の解析とn-gramによる部分一致を組み合わせています。

## 関連ツール

- [`solari_instagram_content_aggregate`](https://solari.sh/docs/tools/instagram-content-aggregate.md?lang=ja)
- [`solari_instagram_content_batch`](https://solari.sh/docs/tools/instagram-content-batch.md?lang=ja)
- [`solari_tiktok_content_search`](https://solari.sh/docs/tools/tiktok-content-search.md?lang=ja)
