Scruby-FTS
Plugin for Scruby - Full-text search with Manticore Search.
Scruby-FTS is a plugin for the Scruby project.
Installation
# For Scruby version 0
uv add "scruby-fts>=0.10.0,<1.0.0"
# For Scruby version 1
uv add "scruby-fts>=1.0.0,<2.0.0"
# For Scruby version 2
uv add "scruby-fts>=2.0.0,<3.0.0"
# For Scruby version 3
uv add "scruby-fts>=3.0.0,<4.0.0"
# For Scruby version 4
uv add "scruby-fts>=4.0.0,<5.0.0"
Install Manticore Search
For more information, see the documentation.
- Fedora 42 or later
# Install the repository:
sudo tee /etc/yum.repos.d/manticore.repo << "EOF" > /dev/null
[manticore]
name=Manticore Repository
baseurl=https://repo.manticoresearch.com/repository/manticoresearch/release/centos/10/$basearch
gpgcheck=1
enabled=1
gpgkey=https://repo.manticoresearch.com/GPG-KEY-SHA256-manticore
EOF
# Install Manticore Search:
sudo dnf install manticore manticore-extra
# Install English, German, and Russian lemmatizers:
sudo dnf install manticore-language-packs
# Run Manticore Search:
sudo systemctl start manticore
sudo systemctl enable manticore
sudo systemctl status manticore --no-pager -l
Usage
import anyio
from typing import Annotated, Any
from pydantic import Field
from scruby import ReturnType, Scruby, ScrubyModel
from scruby_fts import FullTextSearch, FTSConfig
class Car(ScrubyModel):
"""Car model."""
brand: str = Field(frozen=True)
model: str = Field(frozen=True)
year: int
power_reserve: int
description: str
# key is always at bottom
key: Annotated[
str,
Field(
frozen=True,
default_factory=lambda data: f"{data['brand']}:{data['model']}",
),
]
async def main() -> None:
"""Example."""
# Activate database.
Scruby.run(plugins=[FullTextSearch])
# Delete unnecessary tables that remain due to errors
await FullTextSearch.delete_orphaned_tables()
# Get collection `Car`
car_coll = Scruby(Car)
# Create cars.
for num in range(1, 10):
car = Car(
brand="Mazda",
model=f"EZ-6 {num}",
year=2025,
power_reserve=600,
description="Electric cars are the future of the global automotive industry.",
)
await car_coll.add_doc(car)
# Find car
car: Car | None = await car_coll.plugins.fullTextSearch.find_one(
morphology=FTSConfig.morphology.get("English"), # 'English' or 'en'
full_text_filter=("model", "EZ-6 9"),
)
# Return car in JSON format
car: str | None = await car_coll.plugins.fullTextSearch.find_one(
morphology=FTSConfig.morphology.get("English"), # 'English' or 'en'
full_text_filter=("model", "EZ-6 9"),
return_type=ReturnType.JSON,
)
# Return car in Dictionary format
car: dict | None = await car_coll.plugins.fullTextSearch.find_one(
morphology=FTSConfig.morphology.get("English"), # 'English' or 'en'
full_text_filter=("model", "EZ-6 9"),
return_type=ReturnType.DICT,
)
# Fand cars
cars: list[Car] | None = await car_coll.plugins.fullTextSearch.find_many(
morphology=FTSConfig.morphology.get("en"), # 'en' or 'English'
full_text_filter=("description", "future of automotive"),
)
# Return cars in JSON format
cars: str | None = await car_coll.plugins.fullTextSearch.find_many(
morphology=FTSConfig.morphology.get("en"), # 'en' or 'English'
full_text_filter=("description", "future of automotive"),
return_type=ReturnType.JSON,
)
# Return cars in Dictionary format
cars: list[dict] | None = await car_coll.plugins.fullTextSearch.find_many(
morphology=FTSConfig.morphology.get("en"), # 'en' or 'English'
full_text_filter=("description", "future of automotive"),
return_type=ReturnType.DICT,
)
# Full database deletion.
# Hint: The main purpose is tests.
Scruby.napalm()
if __name__ == "__main__":
anyio.run(main)
Metadata
Release files for scruby-fts 4.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| scruby_fts-4.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Release files / scruby_fts-4.0.1-py3-none-any.whl
| Download URL | scruby_fts-4.0.1-py3-none-any.whl |
|---|---|
| Size | 22.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
feaf3ba79f6fceb88a728f721a6be6751af68b7f4d841aa0d241bb0b3d6e84e9
|
|
BLAKE2b-256 checksum How to use checksums |
1f55e119cb1c02ced33b99282486082d8982fa16c59853092f42efa0459da9f6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.23 {"installer":{"name":"uv","version":"0.12.23","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Fedora Linux","version":"44","id":"","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|