我计划用python3创建一个简单的搜索引擎。浏览sqlite fts3/fts4的文档后,我选择了存储文档,因为全文搜索很快。我已经有了一组网页,它们的文本被提取并保存在文本文件中。
因此,我计划按以下方式创建fts4表:

conn = sqlite3.connect('/home/xyz/exampledb.db')
c = conn.cursor()
c.execute("CREATE VIRTUAL TABLE mypages USING fts4(docid, name, content)")

然后我将遍历文本文件,将其存储在一个字符串中,并将该字符串连同名称和docid(从1到n的整数,其中n是文档总数)一起插入fts表中
但是sqlite文档中的以下语句让我感到困惑,不确定上面的代码是否能工作:
虚拟表是外部存储或计算引擎的接口,它看起来是一个表,但实际上并不在数据库文件中存储信息。
那么这些信息将存储在哪里呢?如果是普通的sqlite表,我将首先创建一个数据库文件并在此数据库文件中创建表。如果我必须在另一台计算机中使用同一个数据库,我只需复制此文件并将其粘贴到该计算机上。我可能在文档中遗漏了一些内容,但我想在实现之前弄清楚信息将如何存储。

最佳答案

文档中的这句话有点误导人;虚拟表本身并不在数据库中存储数据,但是实现虚拟表的引擎可能会选择使用其他表来存储数据。
文件section 9.1中解释了FTS的情况:
对于数据库中的每个FTS虚拟表,创建三到五个真实(非虚拟)表来存储底层数据。这些实表称为“影子表”。真正的表名为“%_content”、“%_segdir”、“%_segments”、“%_stat”和“%_docsize”,其中“%”替换为FTS虚拟表的名称。

关于python - sqlite fts3/fts4中的信息存储,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15037690/

10-14 19:29
查看更多