2012-07-29 46 views
3

如何获取lucene搜索字符串的确切时间? 我想表现的东西是这样的: enter image description here计算lucene搜索的时间

关于x结果xx秒。

我怎样才能得到准确的时间?是他们在lucene库下的任何实用工具吗? 还是我需要自己计算一下?

编辑: 假设他们是在Lucene的核心库中没有实用本:

这是搜索码:

TopScoreDocCollector collector = TopScoreDocCollector.create(100, true); 
      is.search(query, collector); 
      hits = collector.topDocs().scoreDocs; 

我怎样才能得到搜索的准确时间(这行应该我用计时器包装)?

多了一个编辑:我想这:

 long t1 = System.currentTimeMillis(); 
     is.search(query, collector); 
     hits = collector.topDocs().scoreDocs; 
     long t2 = System.currentTimeMillis(); 

     Long time = (t2-t1); 
     System.out.println("time : " + time); 

我得到time : 0控制台上的每次搜索。

是否意味着...... Lucene在搜索中没有时间? (我的索引中只有100个文档)

还有一个:试过这个;

long start = System.nanoTime(); 
      is.search(query, collector); 
      hits = collector.topDocs().scoreDocs; 
      long end = System.nanoTime(); 

      long time = (end - start)/1000; 

此打印:

time : 10261 
time : 12285 
time : 14513 
time : 1309 
+1

只是在执行搜索的调用周围包裹一个计时器。 – adrianbanks 2012-07-29 19:27:50

+0

这意味着..NO在lucene核心下的实用程序? – JAVAGeek 2012-07-29 19:28:41

+1

100个文件数量非常少。尝试使用'System.nanoTime()' – mishadoff 2012-07-29 20:16:05

回答

2

在Lucene的搜索可能意味着不同的事情,不同的人。例如。只是搜索(indexSearcher.search(...))VS搜索+迭代所有文档(或只是一页文档)。或与VS没有排序。这可能会给已经很复杂的API增加不必要的混乱。

将时间测量代码封装搜索呼叫非常简单。顺便说一句,考虑使用guava's Stopwatch或任何其他类似的工具,而不是System.currentTime*