lucene指数更新策略

时间:2012-01-30 21:10:17

标签: lucene

我正在为我的应用程序构建lucene web服务器(用Java),并希望通过上游应用程序向该服务器提供近100次搜索命中/秒(此服务器将托管在由负载均衡器平衡的各种物理盒上)。

数据透视我将拥有近50K文档(每个文档大小不到1kb)并且每天都有新的/更新的~500个文档。

我想知道最常用的方法是每天在500个文档上构建索引,而不会影响上游扫描过程的性能。

我无法在所有服务器之间使用任何共享位置进行文件索引共享,我能想到的几个选项

1)使用数据库索引(JDBC目录) - 对PRO和CON不确定 2)使用RAMDirectory索引 - 不确定更新策略。 3)使用文件索引 - 无法想到在各种物理盒之间构建和传播文件基索引的健壮设计。

想了解有关正确索引设置策略的想法/建议。

1 个答案:

答案 0 :(得分:0)

您真的需要自己构建查询/索引服务器吗?

您考虑过ElasticSearch了吗?它将自动分区和复制您的索引,您只需要配置所需的分区数和每个分区的副本数。它还将为您提供索引和查询的简单HTTP接口。在ElasticSearch中,所有节点/实例都是相同的,因此您可以向任何节点发送和查询文档。

如果索引小到50K,我猜一个包含少量副本的分区将处理您的100个查询/秒要求。

无论如何,您的要求似乎很轻。少于1KB的50K文档似乎非常适合内存索引(lucene中的RAMDirectory)。根据将发布到索引的查询,您可以使用较少的计算机来处理100个查询/秒。

新文档的索引可以通过多种方式完成,考虑到您对更新延迟没有硬性要求,并且新文档的数量非常少。您可以通过HTTP将文档发送到每个实例,通过ssh / ftp发送带有更新文档的CSV文件(或其他内容),每天一次实例索引此文件。