Getting Started
This guide demonstrates basic usage of Taiyo with Apache Solr.
Installation
pip install taiyo
Or using uv:
uv add taiyo
Running Solr
Start a Solr instance using Docker:
docker run -p 8983:8983 solr:9 solr-foreground -c
This command starts Solr in cloud mode on http://localhost:8983.
Basic Usage
Create Collection and Schema
Create a collection and define fields for your documents:
from taiyo import SolrClient
from taiyo.schema import SolrField
# Connect and create collection
client = SolrClient("http://localhost:8983/solr")
client.create_collection("books", num_shards=1, replication_factor=1)
client.set_collection("books")
# Define schema fields
fields = [
SolrField(name="title", type="text_general", stored=True, indexed=True),
SolrField(name="author", type="string", stored=True, indexed=True),
SolrField(name="year", type="pint", stored=True, indexed=True),
]
for field in fields:
client.add_field(field)
Add Documents
from taiyo import SolrDocument
books = [
SolrDocument(title="The Great Gatsby", author="F. Scott Fitzgerald", year=1925),
SolrDocument(title="1984", author="George Orwell", year=1949),
]
client.add(books, commit=True)
Search
# Find all books
results = client.search("*:*")
print(f"Found {results.num_found} books")
for doc in results.docs:
print(f"- {doc.title} by {doc.author}")
Query Syntax
String Queries
Simple string-based queries for quick searches:
# Search by field
results = client.search("author:Orwell")
# Search multiple fields
results = client.search("title:Gatsby OR author:Lee")
# Phrase search
results = client.search('title:"Great Gatsby"')
# Range search
results = client.search("year:[1940 TO 1950]")
Query Parsers
Use query parser objects for structured queries with filters and sorting:
from taiyo.parsers import StandardParser
# Search with filters and sorting
parser = StandardParser(
query="author:Orwell",
filter_queries=["year:[1940 TO 1950]"],
sort="year desc",
rows=10,
)
results = client.search(parser)
Search across multiple fields with different weights:
from taiyo.parsers import ExtendedDisMaxQueryParser
parser = ExtendedDisMaxQueryParser(
query="science fiction",
query_fields={"title": 3.0, "description": 1.0}, # Title is 3x more important
)
results = client.search(parser)
Group results by author using method chaining:
from taiyo.parsers import StandardParser
# Group books by author
parser = StandardParser(query="*:*").group(
field="author",
limit=5, # Show up to 5 books per author
)
results = client.search(parser)
# Access grouped results
for group in results.groups:
print(f"Author: {group.group_value}")
for doc in group.docs:
print(f" - {doc.title}")
Document Models
Define custom document types using Pydantic:
from taiyo import SolrDocument
class Book(SolrDocument):
title: str
author: str
year: int | None = None
# Create books with validation
book = Book(title="1984", author="George Orwell", year=1949)
client.add(book, commit=True)
# Search with typed results
results = client.search("*:*", document_model=Book)
for book in results.docs:
print(f"{book.title} ({book.year})")
Async Support
Use AsyncSolrClient for async/await:
import asyncio
from taiyo import AsyncSolrClient
async def search_books():
async with AsyncSolrClient("http://localhost:8983/solr") as client:
client.set_collection("books")
results = await client.search("author:Orwell")
return results
asyncio.run(search_books())
Working with Results
Search results have useful properties:
results = client.search("author:Orwell")
print(f"Total matches: {results.num_found}")
print(f"Query took: {results.query_time}ms")
# Iterate through documents
for doc in results.docs:
print(doc.title)
Pagination
Get results page by page:
# First page (0-9)
results = client.search("*:*", rows=10, start=0)
# Second page (10-19)
results = client.search("*:*", rows=10, start=10)
# Third page (20-29)
results = client.search("*:*", rows=10, start=20)
Authentication
If your Solr requires authentication:
from taiyo import SolrClient, BasicAuth
client = SolrClient(
base_url="http://localhost:8983/solr", auth=BasicAuth("username", "password")
)
See Also
- Query Parsers - Advanced query syntax and parser configuration
- Grouping - Grouping results
- Faceting - Result aggregation and filtering
- Highlighting - Text snippet highlighting
- Schema Management - Field and type definitions
- Clients Guide - Client configuration and authentication