Skip to main content

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

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pocketsearch-0.42.0.tar.gz (37.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pocketsearch-0.42.0-py3-none-any.whl (39.9 kB view details)

Uploaded Python 3

File details

Details for the file pocketsearch-0.42.0.tar.gz.

File metadata

  • Download URL: pocketsearch-0.42.0.tar.gz
  • Upload date:
  • Size: 37.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pocketsearch-0.42.0.tar.gz
Algorithm Hash digest
SHA256 829e96c62c99a7f497a8df58e69b7eb0524f08d6a4139b931b25420668486368
MD5 f9c2817e0f6e03b48d0f9525c5822ff5
BLAKE2b-256 facfd4c60b1f16b3877481a4941339d6c339e658da6636e536f8b98f683d8981

See more details on using hashes here.

File details

Details for the file pocketsearch-0.42.0-py3-none-any.whl.

File metadata

  • Download URL: pocketsearch-0.42.0-py3-none-any.whl
  • Upload date:
  • Size: 39.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for pocketsearch-0.42.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e80ee36ae349c2321081c24d7f11a524ca2a81ffeec84df667ff7074275d02c6
MD5 e8f020bb50a7178dc4e64328d3040d9d
BLAKE2b-256 af32603dc3d6033d66f54b18b6389e85e3b473e4e3e342419013142f051ef661

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page