Files
bookhoard/docs/developer/api/media-items/search_media_items.md
T
john-okeefe 06800b9a27 docs: update search API documentation with unified endpoint
- Update search_media_items.md with comprehensive fuzzy filter documentation
- Document all filter parameters (author_filter, series_filter, genre_filter, language_filter)
- Document autocomplete parameters (authors, genres, series, languages)
- Add fuzzy search examples (asimov → Asimov, Isaac)
- Add exact match with quotes examples ("Foundation and Empire")
- Add combined search + filters examples
- Add field-specific search examples for autocomplete
- Document error responses (400, 401, 404)
- Remove deprecated filter_sort_media_items.md (functionality moved to search endpoint)
- Update api-reference.md to reflect unified endpoint
- Update api/api-reference.md to reflect unified endpoint

All text filters use pg_trgm fuzzy matching (threshold: 0.3) except years/booleans which are exact.
2026-03-23 22:38:23 -04:00

5.3 KiB

Search Media Items (Unified)

Search and filter media items with fuzzy matching support.

Note: All text filters use fuzzy matching via PostgreSQL pg_trgm (threshold: 0.3 similarity). This handles typos and partial matches automatically. Use quotes for exact match.

Endpoint: GET /api/media-items/search Auth: Required

Query Parameters

Search Parameters

Parameter Type Required Description
q string No Search query (fuzzy by default, exact in quotes)
library_id string Yes Filter to specific library (UUID)
limit integer No Number of results (default 50, max 200)
offset integer No Number to skip for pagination

Filter Parameters (All Fuzzy Except Years/Booleans)

Parameter Type Description
author_filter string Fuzzy match author field
series_filter string Fuzzy match series field
genre_filter string Fuzzy match genre field
language_filter string Fuzzy match language field
year_min integer Minimum copyright year (exact range)
year_max integer Maximum copyright year (exact range)
has_cover boolean Filter by cover image presence (exact boolean)
Parameter Type Description
authors string Search author values for autocomplete dropdown
genres string Search genre values for autocomplete dropdown
series string Search series values for autocomplete dropdown
languages string Search language values for autocomplete

Request Headers

Header Type Required Description
Authorization string Yes Bearer token

Search Behavior

Fuzzy Search (Default)

Handles typos and partial matches automatically:

  • "asimov" → matches "Asimov, Isaac", "Asimov, Foundation"
  • "scifi" → matches "Sci-Fi", "Science Fiction"
  • "azimov" → matches "Asimov, Isaac" (typo tolerance)

Exact Search (With Quotes)

Use double quotes for exact phrase matching:

  • "\"Foundation and Empire\"" → only "Foundation and Empire"
  • "\"Asimov, Isaac\"" → only "Asimov, Isaac"

Filter Behavior

Text filters (fuzzy):

  • author_filter=asimov → fuzzy matches author field
  • genre_filter=scifi → fuzzy matches genre field

Exact filters:

  • year_min=2000&year_max=2010 → exact year range
  • has_cover=true → exact boolean match

Example Requests

Search all fields for "foundation":

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&q=foundation
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

2. Fuzzy Author Filter

Find books by "asimov" (matches "Asimov, Isaac"):

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&author_filter=asimov
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

3. Combined Search + Filters

Search "foundation" within books by "asimov":

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&q=foundation&author_filter=asimov
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

4. Exact Match with Quotes

Exact phrase search:

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&q="Foundation%20and%20Empire"
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

5. Multiple Fuzzy Filters

Fiction books from 2000-2010:

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&genre_filter=fiction&year_min=2000&year_max=2010
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

6. Field-Specific Search (Autocomplete)

Get author values for dropdown:

GET /api/media-items/search?library_id=123e4567-e89b-12d3-a456-426614174000&authors=asimov&limit=50
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Response:

{
  "results": [
    {"value": "Asimov, Isaac", "count": 47, "score": 0.8},
    {"value": "Asimov, Isaac & Robert Silverberg", "count": 2, "score": 0.75}
  ],
  "total": 2
}

Response (200 OK)

Media items search:

[
  {
    "id": "uuid",
    "title": "Foundation",
    "author": "Asimov, Isaac",
    "library_id": "...",
    "library_name": "E-Books"
  }
]

Field values search (autocomplete):

{
  "results": [
    {"value": "Asimov, Isaac", "count": 47, "score": 0.8}
  ],
  "total": 1
}

Error Responses

Code Description
400 Invalid library_id
400 Missing library_id
401 Invalid or expired token
404 No results found