2 回答
TA贡献1872条经验 获得超3个赞
你的方法没问题。与全文搜索的权衡是您用快速查询换取慢速索引,因此您可以预先完成尽可能多的工作。
与 Lucene 及其生态系统(Solr、Elasticsearch)相比,Whoosh 索引非常慢。从我的 PC 上的一些快速测试来看,它每秒索引大约 540 行。您可以在大约 4.5 到 5 小时内索引 900 万行。添加的字段越多,尤其是要分析的字段,所需的时间就越长,因此请确保仅分析必要的字段并仅索引所需的字段。
如果您计划多次查询此索引,那么在时间上的投资是值得的,并且您的查询应该相当快。如果你需要经常索引大文件,而且每次都等不及 5 个小时,那么可以考虑切换到 Lucene、Solr 或 Elasticsearch。
您的数据似乎也很简单。如果精确的布尔查询就足够了,Pandas 查询允许您更快地搜索 DataFrame。Pandas 提供了用于基本文本处理的快速矢量化方法,您可以将其用于诸如小写、停用词移除、字符映射和正则表达式之类的事情。
如果您需要评分和 NLP 工具(例如词干提取和分词),您才真正需要全文搜索。
TA贡献1816条经验 获得超6个赞
我在这里分享了这个确切问题的官方文档页面的一部分(https://whoosh.readthedocs.io/en/latest/batch.html)。请参阅其他方法的链接,例如增加内核数量。
增加whoosh索引器的 RAM 内存量。默认设置为仅 128 MB:
from whoosh import index
ix = index.open_dir("indexdir")
writer = ix.writer(limitmb=2048)
为分析器提供更多缓存,否则会显着减慢索引速度。
w = myindex.writer()
# Get the analyzer object from a text field
stem_ana = w.schema["content"].format.analyzer
# Set the cachesize to -1 to indicate unbounded caching
stem_ana.cachesize = -1
# Reset the analyzer to pick up the changed attribute
stem_ana.clear()
添加回答
举报