python - 如何在django的sqlite3数据库中使用全文搜索?

标签 python django sqlite full-text-search

我正在开发一个带有 sqlite3 数据库的 django 应用程序,它具有固定的数据库内容。固定的意思是数据库的内容不会随时间改变。模型是这样的:

class QScript(models.Model):
    ch_no = models.IntegerField()
    v_no = models.IntegerField()
    v = models.TextField()

表中大约有 6500 条记录。给定一段可能缺少某些单词或某些单词拼写错误的文本,我需要确定它的 ch_nov_no。例如,如果数据库中有一个 v 字段带有文本 "This is an example verse",给定的文本如 "This an egsample verse" 应该给我来自 db 的 ch_nov_no。我相信这可以使用全文搜索来完成。

我的查询是:

  1. 全文搜索可以做到这一点吗?根据我的研究,我猜测它可以,如 sqlite3 page 中所述: 全文搜索是“Google、Yahoo 和 Bing 对万维网上的文档所做的”。在 SO 中引用,我阅读了 this article也,以及许多其他人,但没有找到任何非常符合我要求的东西。

  2. 如何在 Django 模型中使用 FTS? 我读了 this但它没有帮助。似乎太过时了。阅读here那:“...需要直接操作数据库以添加全文索引”。搜索主要提供 MySQL 相关信息,但我需要在 sqlite3 中进行搜索。那么如何在 sqlite3 中进行直接操作呢?


编辑:

我坚持使用 sqlite3 的选择正确吗?或者我应该使用不同的东西(如 Alex Morozov 所说的 haystack+elasticsearch)?我的数据库不会变大,我研究过对于小型数据库,sqlite 几乎总是更好(我的情况与第四个 in sqlite's when to use checklist 匹配)。

最佳答案

SQLite's FTS engine基于标记 - 搜索引擎尝试匹配的关键字。

有多种分词器可用,但它们相对简单。 “简单”分词器简单地将每个单词拆分并小写:例如,在字符串“The quick brown fox jumps over the lazy dog”中,单词“jumps”会匹配,但不会匹配“jump”。 “porter”分词器更高级一些,去除了单词的变位,因此“jumps”和“jumping”会匹配,但像“jmups”这样的拼写错误不会匹配。

简而言之,SQLite FTS 扩展是相当基础的,并不是为了与 Google 竞争。

至于Django 集成,我认为没有。您可能需要 use Django's interface for raw SQL queries , 用于创建和查询 FTS 表。

关于python - 如何在django的sqlite3数据库中使用全文搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35020797/

相关文章:

python - 堆叠 LSTM 单元所有输出的总和 - Tensorflow

Python - if、elif、elif、else 语句未按预期工作

django - 如何在Django中显示来自模型的图像?

android - android 中的 compileStatement 或 db.insert

c# - 如何以 c# windows 形式将 Excel 文件数据导入 SQLite 数据库?

python - 热键/热字符串打印 PyCharm 中最后一个变量/所有定义的变量?

python - 当你可以直接插入时,Scrapy 为什么还要麻烦 Items 呢?

python - Django:如何通过 ModelForm 更新个人资料图片?

python - 是否可以从 Django 服务器端检测浏览器版本?

c - 读取 SQLite header