繁体   English   中英

缓存Lucene.net搜索结果

[英]Caching Lucene.net search results

我已经使用Lucene.net在几个小网站上实现搜索功能(包括数据库内容和上传文档),没有任何问题。 现在我有一个网站,我索引5000多个文档(主要是PDF),查询变得有点慢。

我假设加速它的最佳方法是实现某种缓存。 任何人都可以给我任何指针/示例从哪里开始? 如果你除了缓存之外还有其他任何建议(例如我应该使用多个索引吗?)我也想听听。

编辑:

负责缓慢查询的哑用户错误。 我一次创建了整个结果集的精彩集锦,而不仅仅是我正在显示的“页面”。 哎呀。

我将在这里做一个很大的假设,并假设你没有挂在你的索引搜索者之间查询索引的调用。

如果这是真的,那么你肯定应该为索引的所有查询共享索引搜索者。 随着索引变得越来越大(并且它实际上不必变得非常大以使其成为一个因素),重建索引搜索器将变得越来越多的开销。 为了使其正常工作,您需要同步对查询解析器类的访问(它不是线程安全的)。

顺便说一下,Java文档(我发现)就像适用于.net版本一样。

有关您的问题的更多信息,请参阅此处: http//wiki.apache.org/lucene-java/ImproveSearchingSpeed

一定要优化索引。

此外,这是一种快速/简单/有效的实现缓存的方法:HttpRuntime.Cache.Add(...);

您可以使用任何类型的项目/库中的ASP.Net缓存。

Lucene使用自己的内部“缓存”机制使索引检索成为一种快速操作。 不过,我不认为缓存是你的问题。

5000索引文档的大小听起来微不足道,但这在很大程度上取决于您构建索引的方式,索引/存储的内容,查询方式(操作方式),文档大小等。

请尽可能多地填写关于索引的空白信息。

首先,Lucene本身支持内存版本的目录:

Lucene.Net.Store.RAMDirectory

您可以像以下一样使用它:

RAMDirectory idx = new RAMDirectory();

// Make an writer to create the index
IndexWriter writer =
    new IndexWriter(idx, new StandardAnalyzer(), true);

如果这对您有用,但它使用了太多ram,请编写一个包装器并将其作为接口或Web服务公开。 或者,如果您只想缓存实体从缓存中删除时要查询的内容,您可以编写一个Lucene包装器,根据关键字显示缓存最常见的结果。

我更喜欢前面提到的。 使用RAMDirectory创建一个环绕Lucene存储的Web服务或服务项目。 这样,如果索引很大,你可以将web服务卸载到具有大量ram的另一台服务器上 - 并且具有接近即时的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM