如何在 Peewee 和 SQLite 的 FTS5 中使用 trigram tokenizer/similarity 选项?
How do I use the trigram tokenizer/similarity option with Peewee and SQLite's FTS5?
此问题涉及如何将 FTS5 的 trigram tokenizer 与 Peewee 一起使用。
official FTS5 documentation for SQLite cites support for trigram tokenization/similarity:
> The experimental trigram tokenizer extends FTS5 to
> support substring matching in general, instead of the
> usual token matching. When using the trigram tokenizer
> , a query or phrase token may match any sequence of
> characters within a row, not just a complete token.
>
> CREATE VIRTUAL TABLE tri USING fts5(a, tokenize="trigram");
> INSERT INTO tri VALUES('abcdefghij KLMNOPQRST uvwxyz');
我尝试使用 Peewee 设置基于 class 的 FTS。我更改了使用 trigram tokenizer 的选项:
class Meta:
db_table = 'fts_test_db'
database = test_db
options = {'tokenize': 'trigram', 'content': PrecedentPW}
当我尝试使用这些选项创建 table 时,出现此错误:
_db.create_tables([_fts], )
>> peewee.OperationalError: no such tokenizer: trigram
但是如果我更改分词器选项以使用其他选项(例如 'porter'),则不会出现错误。
如何将 trigram 分词器与 Peewee 一起使用?
您可能需要自己编译分词器或确保您是 运行 足够新的版本。在 Sqlite 的 3.34.0 之前,trigram tokenizer 默认不包含:https://www.sqlite.org/releaselog/3_34_0.html
此问题涉及如何将 FTS5 的 trigram tokenizer 与 Peewee 一起使用。
official FTS5 documentation for SQLite cites support for trigram tokenization/similarity:
> The experimental trigram tokenizer extends FTS5 to > support substring matching in general, instead of the > usual token matching. When using the trigram tokenizer > , a query or phrase token may match any sequence of > characters within a row, not just a complete token. > > CREATE VIRTUAL TABLE tri USING fts5(a, tokenize="trigram"); > INSERT INTO tri VALUES('abcdefghij KLMNOPQRST uvwxyz');
我尝试使用 Peewee 设置基于 class 的 FTS。我更改了使用 trigram tokenizer 的选项:
class Meta: db_table = 'fts_test_db' database = test_db options = {'tokenize': 'trigram', 'content': PrecedentPW}
当我尝试使用这些选项创建 table 时,出现此错误:
_db.create_tables([_fts], ) >> peewee.OperationalError: no such tokenizer: trigram
但是如果我更改分词器选项以使用其他选项(例如 'porter'),则不会出现错误。
如何将 trigram 分词器与 Peewee 一起使用?
您可能需要自己编译分词器或确保您是 运行 足够新的版本。在 Sqlite 的 3.34.0 之前,trigram tokenizer 默认不包含:https://www.sqlite.org/releaselog/3_34_0.html