Files
bookhoard/docs/developer/api/media-items/search_media_items.md
T
john-okeefe ab86eec32f docs: document tags filter API and usage
- Add comprehensive API documentation for tags_filter parameter
- Document fuzzy matching behavior with examples
- Add user guide for tag-based filtering
- Document backward compatibility with genre_filter
- Include examples of fuzzy matching ("Sci Fi" → "Science Fiction")

Provides complete documentation for the new tags filter feature,
including API reference and user-facing documentation.

Relates to IMPLEMENTATION_TAGS_FILTER.md Phase 7
2026-03-25 20:38:33 -04:00

5.6 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
tags_filter string Fuzzy match tags array
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
tagss string Search tags 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
  • tags_filter=scifi → fuzzy matches tags 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&tags_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": "Isaac Asimov",
    "tags": ["Science Fiction", "Adventure"],
    "library_id": "uuid",
    "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

Backward Compatibility

The genre_filter parameter is deprecated but still supported for backward compatibility. It will return 0 results for books imported from Calibre (genre field is NULL).