2013-02-23 84 views
3

正打算在python(python3)中创建一个简单的搜索引擎。通过sqlite fts3/fts4的文档,由于全文搜索速度很快,因此它成为我选择存储文档的选择。我已经有一组网页,其文本被提取并保存在文本文件中。
因此,我打算创建FTS4表方式如下:
sqlite中的信息存储fts3/fts4

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


那么我会遍历文本文件,其存储在一个字符串,与名称一起插入这个字符串到FTS表和docid(从1到n的整数,其中n是总文档)
但是sqlite文档中的以下语句让我感到困惑,并且不确定我的上述代码是否可用:
虚拟表是外部存储的接口或计算引擎似乎是一个表,但实际上并没有将信息存储在d中数据库文件。

那么信息将被存储在哪里?如果它是一个常规的sqlite表,我会先创建一个数据库文件并在这个数据库文件中创建表。如果我必须在另一台机器上使用相同的数据库,我会简单地复制这个文件并粘贴在那台机器上。我可能在文档中遗漏了一些东西,但我想清楚在我实现它之前如何存储信息。

回答

1

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

为FTS会发生什么情况在文档的section 9.1说明:

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

+0

按照我的计划,我有权抓取网页的客户机,并从pages.But最终存储中提取文本是在我的服务器上,所以我的选择是要么在这些机器上创建临时表FTS,然后将其传送到服务器(从便携式硬盘传输),将此临时表与主FTS表合并或将这些文本文档传输到服务器,然后使用这些文档更新主FTS表。接着通过上述文档,我觉得创建成本太高临时表然后合并它,因为合并比使用文档更新需要更多的时间。 – user2078134 2013-02-23 15:54:19