【发布时间】:2011-04-19 14:14:55
【问题描述】:
我正在尝试制作一个索引/搜索应用程序的原型,该应用程序使用非常不稳定的索引数据源(论坛、社交网络等),以下是一些性能要求,
非常快的周转时间(我的意思是任何新数据(例如论坛上的新消息)都应该很快(不到一分钟)出现在搜索结果中)
我需要定期丢弃旧文档,以确保搜索结果没有过时。
最后但同样重要的是,搜索应用程序需要响应。 (延迟大约 100 毫秒,应该支持至少 10 qps)
我目前的所有要求都可以在不使用 Lucene 的情况下满足(这将让我满足所有 1,2 和 3),但我预计未来会有其他要求(如搜索相关性等),其中 Lucene更容易实现。但是,由于 Lucene 是为比我目前正在处理的更复杂的用例而设计的,因此我很难满足我的性能要求。
这里有一些问题,
一个。我读到 IndexWriter 类中的 optimize() 方法很昂贵,不应该被频繁更新的应用程序使用,有什么替代方案?
b.为了进行增量更新,我需要不断提交新数据,并不断刷新索引阅读器以确保它有可用的新数据。这些将影响上面的 1 和 3。我应该尝试重复索引吗?解决此问题的常用方法有哪些?
c。我知道 Lucene 提供了一个删除方法,它可以让您删除与某个查询匹配的所有文档,在我的情况下,我需要删除所有超过某个年龄的文档,现在一个选项是为每个文档添加一个日期字段文档并使用它稍后删除文档。是否可以对文档 ID 进行范围查询(我可以创建自己的 id 字段,因为我认为由 lucene 创建的字段会不断变化)以删除文档?它比比较以字符串表示的日期更快吗?
我知道这些都是非常开放的问题,所以我不是在寻找详细的答案,我会尽量将您的所有答案视为建议,并用它们来指导我的设计。谢谢!如果您需要任何其他信息,请告诉我。
【问题讨论】:
标签: performance indexing lucene