Skip to main content

build status

sqlitefts-python

sqlitefts-python provides binding for tokenizer of SQLite Full-Text search(FTS3/4) and FTS5. it allows you to write tokenizers in Python.

SQLite has Full-Text search feature FTS3/FTS4 and FTS5 along with some predefined tokenizers for FTS3/4, and also predefined tokenizers for FTS5. It is easy to use and has enough functionality. Python has a built-in SQLite module, so that it is easy to use and deploy. You don’t need anything else to full-text search.

But… the predefined tokenizers are not enough for some languages including Japanese. Also it is not easy to write own tokenizers. This module provides ability to write tokenizers using Python with CFFI, so that you don’t need C compiler to write your tokenizer.

It also has ranking functions based on peewee, utility function to add FTS5 auxiliary functions, and an FTS5 aux function implementation.

NOTE: all connections using this modules should be explicitly closed. due to GC behavior, it can be crashed if a connection is left open when a program terminated.

Sample tokenizer

There are differences between FTS3/4 and FTS5, so 2 different base classes are defined.

  • a tokenizer for FTS3/4 can be used with FTS5 by using FTS3TokenizerAdaptor.

  • a tokenizer for FTS5 can be used with FTS3/4 if ‘flags’ is not used.

FTS3/4:

import sqlitefts as fts

class SimpleTokenizer(fts.Tokenizer):
    _p = re.compile(r'\w+', re.UNICODE)

    def tokenize(self, text):
        for m in self._p.finditer(text):
            s, e = m.span()
            t = text[s:e]
            l = len(t.encode('utf-8'))
            p = len(text[:s].encode('utf-8'))
            yield t, p, p + l

tk = sqlitefts.make_tokenizer_module(SimpleTokenizer())
fts.register_tokenizer(conn, 'simple_tokenizer', tk)

FTS5:

from sqlitefts import fts5

class SimpleTokenizer(fts5.FTS5Tokenizer):
    _p = re.compile(r'\w+', re.UNICODE)

    def tokenize(self, text, flags=None):
        for m in self._p.finditer(text):
            s, e = m.span()
            t = text[s:e]
            l = len(t.encode('utf-8'))
            p = len(text[:s].encode('utf-8'))
            yield t, p, p + l

tk = fts5.make_fts5_tokenizer(SimpleTokenizer())
fts5.register_tokenizer(conn, 'simple_tokenizer', tk)

Requirements

  • Python 2.7, Python 3.9+, and PyPy2.7, PyPy3.10+ (older versions may work, but not tested)

    • sqlite3 has to be dynamically linked. see GH-37

  • CFFI

  • FTS3/4 and/or FTS5 enabled SQLite3 or APSW (OS/Python bundled SQLite3 shared library may not work, building sqlite3 from source or pre-compiled binary may be required)

    • SQLite 3.11.x have to be compiled with -DSQLITE_ENABLE_FTS3_TOKENIZER to enable 2-arg fts3_tokenizer

    • SQLite older/newer than 3.11.x do not have extra requirements

Note for APSW users:
  • FTS3 should work as same as builtin sqlite3 - sqlite3(_sqlite3) is used to access SQLite internals

  • sqlitefts.fts5 does not support APSW Amalgamation build. see GH-14

Licence

This software is released under the MIT License, see LICENSE.

Thanks

Release files for sqlitefts 1.0.1

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

Source distribution (sdist)

Source distribution for sqlitefts 1.0.1
File Size Uploaded
sqlitefts-1.0.1.tar.gz 16.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sqlitefts 1.0.1
File Interpreter ABI Platform
sqlitefts-1.0.1-py2.py3-none-any.whl Python 2, Python 3 none any Details

Total release size: 30.6 kB

Release files / sqlitefts-1.0.1.tar.gz

Download URL sqlitefts-1.0.1.tar.gz
Size 16.5 kB
Tags Source
SHA-256 checksum
How to use checksums
056a513ba11bec060ab38a7b30186a2940653bfca83bdd291b212639815c7f3c
BLAKE2b-256 checksum
How to use checksums
cb3116dddfbbbb79017202a025d3e0c18dbbdeef9c91b3ea350ddcb56afff408
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.3

Release files / sqlitefts-1.0.1-py2.py3-none-any.whl

Download URL sqlitefts-1.0.1-py2.py3-none-any.whl
Size 14.1 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
4c31add996627753e6da604c18f5720189ac5404c3fbcdb22ffbdc7838f35a14
BLAKE2b-256 checksum
How to use checksums
0faa3033d5464b309373ce63645f423c940c6dc026cfc38ae18e81836714d196
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.9.3

Release history Release notifications | RSS feed

This release

1.0.1 This release

2 release files

1.0.0

2 release files

0.5.1

2 release files

0.4.9

2 release files

0.4.0

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2

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