我有一个大约900万行的CSV文件。我希望能够快速地从这个文件中搜索一行。我决定使用pythonwhoosh索引这些数据,然后搜索它,如下所示。在
schema = Schema(content=TEXT(stored=True, analyzer=RegexTokenizer() | LowercaseFilter() | CharsetFilter(accent_map)))
if not os.path.exists("index"):
os.mkdir("index")
ix = create_in("index", schema)
ix = open_dir("index")
writer = ix.writer()
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
writer.add_document(content=line)
writer.commit()
我不确定这是否是索引数据的正确/快速方法。更改模式是否会加快索引速度?如果不是这样,那么在这样大的文件大小上使用whoosh或其他索引库是否是一个好主意?在
好在索引只会做一次,所以我愿意等待,如果这将给一个快速的搜索时间。我对全文搜索没有经验。有人知道吗,我的设置,索引需要多长时间?在
这是我的csv示例:
^{pr2}$
你的方法很好。全文搜索的折衷是用快速的查询换取缓慢的索引,因此尽可能多地提前完成工作。在
与Lucene及其生态系统(Solr,Elasticsearch)相比,Whoosh索引非常慢。在我的电脑上每秒钟大约测试540行索引。您可以预期在大约4.5到5个小时内索引900万行。添加的字段越多,尤其是要分析的字段,所需的时间就越长,因此请确保只分析必要的字段,并仅为所需的内容编制索引。在
如果您计划多次查询此索引,那么在时间上的投资是值得的,并且您的查询应该相当快。如果您需要频繁地索引大文件,并且不能每次等待5小时,那么可以考虑切换到Lucene、Solr或Elasticsearch。在
你的数据看起来也很简单。如果精确的布尔查询就足够了,Pandas查询允许您更快地搜索数据帧。Pandas为基本的文本处理提供了快速的矢量化方法,您可以将这些方法用于诸如小写、非索引字删除、字符映射和正则表达式。在
你只需要真正的全文搜索,如果你需要评分和NLP设施,如词干和分词。在
相关问题 更多 >
编程相关推荐