【发布时间】:2011-02-27 12:15:50
【问题描述】:
我在(当前)70Gig 索引上使用 Lucene.net (2.9.2.2)。我可以进行相当复杂的搜索并在 1 ~ 2 秒内获取所有文档 ID。但要实际加载所有命中(在我的测试查询中大约有 70 万次)需要 5 分钟以上。
我们没有将 lucene 用于 UI,这是一个进程之间的数据存储,我们有数亿个预缓存的数据元素,我正在处理的部分从每个找到的文档中导出一些特定字段。 (因此,没有分页,因为这是进程之间的导出)。
我的问题是在搜索结果中获取所有文档的最佳方式是什么?目前我正在使用一个自定义收集器,它对文档进行获取(使用 MapFieldSelector)作为其收集。我还尝试在收集器完成后遍历列表。但那更糟。
我对想法持开放态度:-)。
提前致谢。
【问题讨论】:
-
您能否详细说明为什么您需要为每个查询加载数十万次点击?我还没见过这样的应用程序。
-
对于您的 700,000 个文档,总数据量是多少(大小)?如果数据很多,加载数据的速度不会超过磁盘读取数据的速度。另外,您在阅读数据时对数据做了什么?将其写入磁盘?记住它?
-
这是一个导出过程..查找符合条件的配置文件..匹配的配置文件全部移交给另一个进程。该过程可能只是将 ID 导出给用户(异步),或者它可能对所有这些 ID 进行进一步处理。为了提取 700,000 个文档的当前目标字段,我们正在查看大约 100 megs ..(可能更多更糟糕的情况 senario).. 要提取整个文档,可能是 750 ~ 800 megs)。是的,因为这是一个处理过程,所以需要所有的命中。
-
所以在您的示例中,加载 700K 文档的目标字段是 5 分钟以上,还是加载所有 700k 文档的整个文档?
标签: performance search lucene lucene.net