【发布时间】:2010-12-24 21:38:09
【问题描述】:
SQLite + FTS3 for python 有什么好的替代品吗?
我正在遍历一系列文本文档,并希望根据一些文本查询对它们进行分类。例如,我可能想知道文档是否在“购买”的三个单词中提及“评级”或“升级”。此查询的 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 下工作。
有没有更好的方法?也许是不同的图书馆?更快的东西?谢谢。
【问题讨论】:
-
嗯,看来我需要先解决这个问题(升级到 Python 2.6.4 之后): c.execute('CREATE VIRTUAL TABLE fts USING FTS3(content TEXT)') sqlite3.OperationalError: no此类模块:FTS3
标签: python search text full-text-search