# 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에, 계정 참조는 account 툴에 넘기면 돼요. 커버리지: KR, JP, US, TW 리전만 검색할 수 있고 대략 최근 6개월치 포스트를 담아요. total은 10,000까지 정확하고 거기서 포화해요. since/until(UTC 날짜)로 범위를 좁혀요. 로그인된 SOLARI 계정이면 누구나 사용할 수 있어요.

**언제 쓰나** — 주제나 표현으로 포스트를 찾을 때. 답이 카운트라면 content aggregate를 쓰세요.

**무엇이 돌아오나** — 관련도 순 히트. 매치 하이라이트 포함.

## 파라미터

- `query` (string, 필수) — 캡션, 크리에이터 bio, 영상 전사문에 매칭되는 자유 텍스트 키워드 쿼리.
- `region` (enum, 선택, 기본값 "KR") — 검색할 리전. 이 네 개 리전만 인덱싱되어 있어요. 값: `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=ko)
- [`solari_instagram_content_batch`](https://solari.sh/docs/tools/instagram-content-batch.md?lang=ko)
- [`solari_tiktok_content_search`](https://solari.sh/docs/tools/tiktok-content-search.md?lang=ko)
