我试图原型,使用非常不稳定索引的数据源(论坛,社交网络等)的索引/搜索应用,这里有一些性能要求,如何处理非常频繁地更新Lucene索引
非常快的周转时间(我的意思是,任何新的数据(如在论坛上一个新的消息)应该是在搜索结果中可很快(不到一分钟))
我需要定期丢弃旧文件,以确保搜索结果不会过时。
最后但并非最不重要的一点,搜索应用程序需要有响应。 (100毫秒数量级上的延迟,并至少应支持10 QPS)
所有的我都可以当前/可满足W 0使用Lucene的要求(这将让我满足所有1,2和3),但我期待着未来的其他需求(比如搜索相关性等),Lucene更容易实现。不过,由于Lucene的设计目标远比我目前正在使用的更复杂,所以我很难满足我的性能要求。
这里有一些问题,
a。我读过IndexWriter类中的optimize()方法很昂贵,不应该被频繁更新的应用程序使用,有什么选择?
b。为了进行增量更新,我需要不断提交新数据,并且不断刷新索引阅读器以确保它具有可用的新数据。这些将影响上面的1和3。我应该尝试重复索引吗?解决这个问题的一些常见方法是什么?
c。我知道Lucene提供了一种删除方法,它可以让你删除所有匹配某个查询的文档,在我的情况下,我需要删除所有年龄大于某个特定年龄的文档,现在有一种方法是为每个文档添加一个日期字段文档并用它来稍后删除文档。是否可以对文档ID进行范围查询(我可以创建自己的ID字段,因为我认为由lucene创建的字段不断更改)删除文档?比比较表示为字符串的日期更快吗?
我知道这些都是非常开放的问题,所以我没有在寻找详细的答案,我会尽力将您的所有答案作为建议,并用它们来通知我的设计。谢谢!如果您需要其他信息,请告诉我。