Python SQLite FTS3 的替代方案?
有没有什么好的替代方案,可以用来代替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 来指定头文件和库的路径。
祝好运,
保罗