我正在开发一个带有 sqlite3 数据库的 django 应用程序,它具有固定的数据库内容。固定的意思是数据库的内容不会随时间改变。模型是这样的:
class QScript(models.Model):
ch_no = models.IntegerField()
v_no = models.IntegerField()
v = models.TextField()
表中大约有 6500 条记录。给定一段可能缺少某些单词或某些单词拼写错误的文本,我需要确定它的 ch_no
和 v_no
。例如,如果数据库中有一个 v
字段带有文本 "This is an example verse",给定的文本如 "This an egsample verse" 应该给我来自 db 的 ch_no
和 v_no
。我相信这可以使用全文搜索来完成。
我的查询是:
全文搜索可以做到这一点吗?根据我的研究,我猜测它可以,如 sqlite3 page 中所述: 全文搜索是“Google、Yahoo 和 Bing 对万维网上的文档所做的”。在 SO 中引用,我阅读了 this article也,以及许多其他人,但没有找到任何非常符合我要求的东西。
如何在 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/