Lucene:最快的方式返回一个短语的文件?

时间:2010-05-09 05:00:48

标签: python search lucene

我正在尝试使用Lucene(实际上是PyLucene!)来查找有多少文档包含我的确切短语。我的代码目前看起来像这样...但它运行得相当慢。有没有人知道更快的方式来返回文件计数?

phraseList = ["some phrase 1", "some phrase 2"] #etc, a list of phrases...

countsearcher = IndexSearcher(SimpleFSDirectory(File(STORE_DIR)), True)
analyzer = StandardAnalyzer(Version.LUCENE_CURRENT)

for phrase in phraseList:
     query = QueryParser(Version.LUCENE_CURRENT, "contents", analyzer).parse("\"" + phrase + "\"")
     scoreDocs = countsearcher.search(query, 200).scoreDocs
     print "count is: " + str(len(scoreDocs))

1 个答案:

答案 0 :(得分:6)

通常,编写自定义命中收集器是使用bitset计算命中数的最快方法,如Collector的javadoc所示。

其他方法是将TopDocs的结果数指定为一个。

TopDocs topDocs = searcher.search(query, filter, 1);

topDocs.totalHits将为您提供结果总数。我不确定这是否与计算分数一样快,这在上述方法中被忽略。

这些解决方案适用于Java。你必须在Python中检查等效技术。