如何最好地将多个文本文件导入 SQLite FTS 虚拟表?

Posted

技术标签:

【中文标题】如何最好地将多个文本文件导入 SQLite FTS 虚拟表?【英文标题】:How best to import multiple text files into SQLite FTS virtual table? 【发布时间】:2014-07-02 21:05:03 【问题描述】:

我有多个文本文件想要导入到 SQLite 中的虚拟 FTS 表中。文档 here 提到将大约 500,000 个文件从安然电子邮件数据集中插入到单个表中。

我不明白这是怎么做到的。

Oreilly here 说只使用 INSERT、UPDATE、DELETE,但我不清楚如何以这种方式从多个外部文件中获取内容。

从命令行使用 .insert 调用 SQLite 的外部脚本是最佳方式吗?

如果是这样,如何防止文件中的任意文本被解释为新列??

非常感谢您的帮助!

【问题讨论】:

【参考方案1】:

插入是通过正常的 INSERT 语句来完成的,如下所示:

INSERT INTO enrondata(content) VALUES('From: georgeanne.hodges@enron.com
To: energy.dl-ga-all_ubsw@enron.com
Subject: Expense Reports
Date: Tue, 5 Feb 2002 09:06:41 -0800 (PST)

In anticipation of the imminent closing of the UBSW Energy transaction, please have all outstanding employee expenses in your possession filed through Enron''s XMS system as soon as possible.
...');

您必须使用一些脚本将电子邮件转换为有效的 SQL 命令,即复制所有引号 ('),并在文件内容周围添加 INSERT 语句。

或者,使用一些脚本读取所有数据并直接插入;例如,在 Python 中:

import sqlite3
db = sqlite3.connect("enron.db")
cursor = db.cursor()
cursor.execute("CREATE TABLE ...")
for each mail ...:
    content = ...
    cursor.execute("INSERT INTO enrondata(content) VALUES(?)", [content])
cursor.close()
db.commit()
db.close()

【讨论】:

好的。谢谢你的回答。我怀疑这比文档页面建议的要复杂。将尝试您的 python 建议。

以上是关于如何最好地将多个文本文件导入 SQLite FTS 虚拟表?的主要内容,如果未能解决你的问题,请参考以下文章

如何增加 Sqlite FTS4 片段大小

SQLite、FTS、MATCH 和分隔列中的文本

SQLite、文本搜索 FTS 等

如何停止。在 SQLite FTS4 中被视为分隔符

如何在 sqlite 中查询一个 fts 表以查找一个匹配的列和另一个不匹配特定查询的列?

SQLite FTS3 - 对多个表进行全文搜索