3

我打算在 python(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 插入到 fts 表中(从 1 到 n 的整数,其中 n 是总文档)
但是 sqlite 文档中的以下语句有我困惑并且不确定我的上述代码是否有效:
虚拟表是外部存储或计算引擎的接口,它看起来是一个表,但实际上并未将信息存储在数据库文件中。
那么信息将存储在哪里?如果它是一个常规的 sqlite 表,我将首先创建一个数据库文件并在这个数据库文件中创建表。如果我必须在另一台机器上使用相同的数据库,我只需复制这个文件并将其粘贴到该机器上。我可能遗漏了文档中的某些内容,但我想在实施之前明确信息将如何存储。

4

1 回答 1

1

文档中的该声明有些误导;虚拟表本身并不在数据库中存储数据,但实现虚拟表的引擎可能会选择使用其他表来存储数据。

FTS 会发生什么在文档的第 9.1 节中进行了解释:

对于数据库中的每个 FTS 虚拟表,都会创建三到五个真实(非虚拟)表来存储基础数据。这些真实的表被称为“影子表”。真实表被命名为“%_content”、“%_segdir”、“%_segments”、“%_stat”和“%_docsize”,其中“%”替换为 FTS 虚拟表的名称。

于 2013-02-23T10:08:11.093 回答