2 回答

TA貢獻1872條經驗 獲得超4個贊
你的方法沒問題。與全文搜索的權衡是您用快速查詢換取慢速索引,因此您可以預先完成盡可能多的工作。
與 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()
添加回答
舉報