【问题标题】:Calculate time of lucene search计算lucene搜索的时间
【发布时间】:2012-07-29 19:24:25
【问题描述】:

如何获得 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

【问题讨论】:

  • 只需在执行搜索的调用周围加上一个计时器。
  • 这意味着 ..没有 lucene 核心下的实用程序??
  • 100 个文档是非常小的数量。尝试使用System.nanoTime()
  • @mishadoff .. 我做到了.. 但我怎么能用它来显示结果.. 我的意思是我应该选择什么单位,这样.. 我在结果页面上没有得到 0 ...

标签: java time lucene


【解决方案1】:

在 Lucene 中搜索对不同的人可能意味着不同的事情。例如。只是搜索 (indexSearcher.search(...)) VS 搜索 + 遍历所有文档(或只是一页文档)。或者使用 VS 不排序。它可能只会给已经很复杂的 API 添加不必要的混乱。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多