2012-03-20 89 views
2

我正在开发一个应用程序,需要在桌面应用程序中创建CLucene索引,但在iOS设备上复制(只读)搜索,并在更新索引时进行有效更新。搜索索引复制

除了简单地重新下载整个索引,只要它发生变化,我的选择是什么? CLucene本身不支持复制,但是Solr(它建立在Lucene的基础之上)的确如此,所以很显然可能。有谁知道Solr如何做到这一点,以及如何实现类似的功能?

如果这是不可能的,是否有任何(非基于Java的)全文搜索实现能够比CLucene更好地满足我的需求?

查询桌面应用程序不是一个选项 - 移动应用程序必须能够离线搜索。

回答

4

Lucene索引基于一次写入多次读段。这意味着,当新的文件已经提交到Lucene索引,你东东检索是:

  • 新段,
  • 合并后段(已在单个段被合并的老段,如果任何),
  • 段文件(存储关于当前段的信息)。

一旦所有这些新文件下载完毕,可以安全地删除已合并的段文件。要将这些更改考虑在内,只需重新打开IndexReader即可。

Solr有一个Java实现来做到这一点,但考虑到它有多简单,使用像rsync这样的同步工具也可以做到这一点。顺便说一下,这是Solr复制在Solr 1.4之前的工作方式,您仍然可以找到some documentation on the wiki about rsync replication