2012-07-29 45 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*