2010-06-18 159 views
7

实现Lucene实时索引的最佳方式是什么?Lucene实时索引?

+1

实时索引什么?你能否多解释一下你正在寻找的东西? – 2010-06-18 06:24:44

+0

我已经花了2年的时间研究这个问题,并且在solr中,我不得不说:在实时索引方面,solr并不是恰当的平台。提交对于大型索引非常重要 - 我听说过每小时只能管理1次提交的大型安装。话虽如此,最近的一个名为Lucandra的项目可能证明是有希望的 - 我现在找不到任何文档,但我想我听到了一些关于不需要提交的内容。 http://github.com/tjake/Lucandra#readme – 2010-06-18 06:28:24

+1

你必须解释更多 - “实时”没有具体含义:至少你需要指定什么是可接受的延迟。例如,软实时(比如,需要5-10秒才能显示更新)对于非巨大的索引来说并不难。 – StaxMan 2010-07-23 23:59:02

回答

4

从索引编写器获取索引读取器。

更新:看起来像当前的方法是open a directory reader using an index writer对象。

+0

这将如何帮助实时索引? – Mikos 2010-06-18 22:25:47

+3

通过允许搜索在提交点之前查找文档。从作者处获得的读者随着文档的添加而不断更新。 – 2010-06-19 07:42:56

+1

虽然试图做IndexReader reader = indexWriter.getReader(); 来自类型IndexWriter的方法getReader()不可见。 http://lucene.apache.org/core/4_7_2/core/org/apache/lucene/index/IndexWriter.html?is-external=true – 2014-05-26 11:18:57

2
+0

Zoie有承诺,但是我发现文档和代码示例严重缺乏。此外,如果索引的文档被批量处理,索引编制速度很快,但是一次索引几个文档实际上非常缓慢。我个人发现原始Lucene是一个更简单的API使用。 – 2011-06-25 13:10:29

1

SolrCloud看起来很有希望。它仍然是非常新的,但将以NoSQL的精神提供分布式Solr索引。

8

Lucene有一个称为近实时搜索的功能来满足这种需求。

它要求您的IndexReader与IndexWriter位于同一个JVM中。

您可以使用IndexWriter进行更改,然后使用IndexReader.open(writer)直接从作者或旧版Lucene发布writer.getReader()中打开reader。这个调用通常会非常快速(与您上次打开阅读器后所做的更改数量成正比),因为它绕过了通常打开阅读器所需的昂贵代码。它能够搜索作者中未提交的更改。

该阅读器仍在搜索作者的时间点快照,即从打开时的所有更改。