Python SQLite FTS3 的替代方案?

2 投票
1 回答
2119 浏览
提问于 2025-04-15 16:50

有没有什么好的替代方案,可以用来代替Python中的SQLite + FTS3?

我正在处理一系列文本文件,想根据一些文本查询来对它们进行分类。比如,我可能想知道某个文件中是否在“买”这个词的三词之内提到了“评分”或“升级”这两个词。用FTS3语法来查询的话,写法是这样的:

(rating OR upgraded) NEAR/3 buy

这听起来不错,但如果我使用FTS3,这个操作似乎有点费劲。整个过程大概是这样的:

# create an SQLite3 db in memory
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('CREATE VIRTUAL TABLE fts USING FTS3(content TEXT)')
conn.commit()

然后,对于每个文档,我需要做类似这样的操作:

#insert the document text into the fts table, so I can run a query
c.execute('insert into fts(content) values (?)', content)
conn.commit()

# execute my FTS query here, look at the results, etc

# remove the document text from the fts table before working on the next document
c.execute('delete from fts')
conn.commit()

我觉得这真的挺费劲的。

我还有一个问题,就是SQLite的FTS在Python 2.5.4中似乎不太好用。它不识别“CREATE VIRTUAL TABLE”这个语法。这就意味着我得升级到Python 2.6,而这又意味着我需要重新测试很多现有的脚本和程序,以确保它们在2.6下能正常工作。

有没有更好的方法?或者说换一个库?有没有更快的选择?谢谢。

1 个回答

2

我建议你单独安装 pysqlite2 模块。你需要确保你的系统里已经安装了 sqlite3,并且它应该包含 FTS3 模块哦;-)

你可以去 http://code.google.com/p/pysqlite/downloads/list 查看最新的代码(截至4月13日,版本是 2.6.0)。这是一个常见的 setuptools 构建。如果你没有安装 sqlite3,或者它的库没有安装在通常的位置 /usr/lib(64),它会给你提示。在这种情况下,你需要更新你的 LD_LIBRARY_PATH,可能还要调整 setup.cfg 来指定头文件和库的路径。

祝好运,
保罗

撰写回答