Skip to main content

pocketsearch

A pure-Python full-text indexing search library based on SQLite and the FTS5 extension, supporting both on-disk and in-memory search indexes.

  • A simple API (inspired by the ORM layer of the Django web framework) for defining schemas and searching - no need to write SQL
  • Multi-field indices using schemas including text, numeric and date/datetime search
  • Prefix, phrase and initial token queries
  • Spell checking
  • Boolean search queries
  • Highlightning search results and extracting snippets
  • Autocomplete features

Pocketsearch does not have any dependencies other than Python (3.8 or higher) itself.

Quick start

Install using PIP:

pip install pocketsearch

Create a search index using a PocketWriter and store it to database my_db.db:

import pocketsearch
with pocketsearch.PocketWriter(db_name="my_db.db") as pocket_writer:
    pocket_writer.insert(text="Hello world")

Open the search index using a PocketReader to perform searches:

import pocketsearch
with pocketsearch.PocketReader(db_name="my_db.db") as pocket_reader:
    for result in pocket_reader.search(text="Hello world"):
        print(result.text)

You can define custom schemas to create multi-field indices:

import pocketsearch as ps

class Product(ps.Schema):

    price = ps.Int()
    description = ps.Text(index=True) # part of full text (FT) index
    category = ps.Text()  # not part of FT index

with ps.PocketWriter(db_name="my_db.db",schema=Product) as pocket_writer:
    pocket_writer.insert(description="Apple",category="Fruit",price=3.21)
    pocket_writer.insert(description="Orange",category="Fruit",price=4.11)

with ps.PocketReader(db_name="my_db.db",schema=Product) as pocket_reader:
    # Search for products with a price greater than or equal 3:
    print(pocket_reader.search(price__gte=3).count())

Read the complete documentation at https://pocketsearch.readthedocs.io/

In-memory search index

Use QuickPocket to run the whole search index in-memory:

import pocketsearch
with pocketsearch.QuickPocket() as index:
    index.insert(text="Hello world !")
    print(index.search(text="world").count())

Once the context manager is closed, the database will disappear too.

You can use the PocketSearch class directly if you prefer:

import pocketsearch
index = pocketsearch.PocketSearch()
index.insert(text="Hello world !")
print(index.search(text="world").count())

Use cases

pocketsearch is intended for projects looking for a server-less, seamless integration into existing Python projects with low to medium-sized document collections.

Please refer to https://github.com/kaykay-dv/pocketsearch/tree/main/tests/DCEP to see how pocketsearch can be used to index more than 160,000 documents.

License: MIT Unit tests main Unit tests development Documentation Status

Metadata

Release files for pocketsearch 0.42.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pocketsearch 0.42.0
File Size Uploaded
pocketsearch-0.42.0.tar.gz 37.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pocketsearch 0.42.0
File Interpreter ABI Platform
pocketsearch-0.42.0-py3-none-any.whl Python 3 none any Details

Total release size: 77.5 kB

Release files / pocketsearch-0.42.0.tar.gz

Download URL pocketsearch-0.42.0.tar.gz
Size 37.6 kB
Tags Source
SHA-256 checksum
How to use checksums
829e96c62c99a7f497a8df58e69b7eb0524f08d6a4139b931b25420668486368
BLAKE2b-256 checksum
How to use checksums
facfd4c60b1f16b3877481a4941339d6c339e658da6636e536f8b98f683d8981
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / pocketsearch-0.42.0-py3-none-any.whl

Download URL pocketsearch-0.42.0-py3-none-any.whl
Size 39.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e80ee36ae349c2321081c24d7f11a524ca2a81ffeec84df667ff7074275d02c6
BLAKE2b-256 checksum
How to use checksums
af32603dc3d6033d66f54b18b6389e85e3b473e4e3e342419013142f051ef661
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.42.0 This release

2 release files

0.41.0

2 release files

0.30.0

2 release files

0.21.0

2 release files

0.20.1

2 release files

0.12.0

2 release files

0.11.0

2 release files

0.9.0

2 release files

0.8.0

2 release files

0.7.1

2 release files

0.7.0

2 release files

0.6.0

2 release files

0.5.7

2 release files

0.5.6

2 release files

0.5.4

2 release files

0.5.3

2 release files

0.5.2

2 release files

0.5.1

2 release files

0.5.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page