我计划在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表,我首先要创建一个数据库文件并在这个数据库文件中创建表。如果我不得不在另一台机器上使用相同的数据库,我只需复制这个文件,将它粘贴在那台机器上。我可能遗漏了文档中的内容,但我希望在实现之前明确信息的存储方式。
答案 0 :(得分:1)
文件中的陈述有些误导;虚拟表本身不会将数据存储在数据库中,但实现虚拟表的引擎可能会选择使用其他表来存储数据。
文档的section 9.1中解释了FTS的情况:
对于数据库中的每个FTS虚拟表,创建三到五个真实(非虚拟)表来存储基础数据。这些真实表称为“影子表”。真实表名为“%_content”,“%_ segdir”,“%_ segments”,“%_ stat”和“%_docsize”,其中“%”由FTS虚拟表的名称替换。