Peewee可以使用highlight(),这是SQLite的FTS5(全文搜索)辅助功能吗?


  1. SQLite的FTS5支持highlight()。该辅助函数为全文搜索查询的结果返回标签:请参阅官方文档。

  2. Peewee在Github上的代码,在<sqlite_ext.py>模块也提到了highlight(),尽管只是顺便提一下。

    内置辅助功能:

    • bm25(tbl[,weight_0,…weight_n](
    • 突出显示(tbl、col_idx、前缀、后缀(
    • 代码段(tbl,col_idx,前缀,后缀,?,max_tokens(
  3. 尽管Peewee已经支持bm25()rank()作为现有的FTS5辅助函数,但我在Peewee的文档中没有发现任何示例代码或对highlight()的引用。

  4. 除非我遗漏了什么,否则我如何在Python代码中使用FTS5highlight()和Peewee?(如果这很重要的话,我用的是Django。(

是的,只需在全文搜索查询中选择fn.highlight(...)即可。

class Post(FTS5Model):
title = SearchField()
content = SearchField()
class Meta:
database = db
db.create_tables([Post])
Post.create(title='alpha', content='this is post alpha')
Post.create(title='beta', content='this is post beta')
Post.create(title='delta', content='this is post delta')
query = (Post
.select(fn.highlight(Post._meta.entity, 1, '[', ']').alias('hi'))
.where(Post.match('post')))
print(query.sql())
for row in query:
print(row.hi)

请注意,我们必须使用Post._meta.entity作为第一个参数,以避免使用表的别名-Sqlite特别注意显式使用FTS表名。

打印:

this is [post] alpha
this is [post] beta
this is [post] delta

最新更新