关于将Lucene从2.2升级到2.9升级到3.1的问题

时间:2011-09-12 04:51:34

标签: java lucene

我有一个使用Lucene 2.2.x的现有软件,我需要升级到3.1。要执行此升级,我已阅读建议首先升级到2.9.x的文档,删除所有弃用警告,然后升级到3.1.x.我已经部署了现有的索引,我需要保持代码兼容。

我的主要问题是处理日期。在2.2.x中,我不得不使用DateTools.dateToString()将Date.getTime()转换为我可以索引和存储的字符串。我在每个文档上创建了两个字段。一个用于搜索以小时分辨率存储,另一个字段未分析。现在,Lucene 2.9.x支持不同于字符串的其他数据类型。如果这些新类型与使用DateTools将日期转换为字符串的先前版本相比,可以在RangeQueries中使用吗?这是我改变它的代码:

在:

return new RangeFilter("dateArchived-stored",
                DateTools.dateToString(start, DateTools.Resolution.MILLISECOND),
                DateTools.dateToString(end, DateTools.Resolution.MILLISECOND),
                false, true );

后:

return NumericRangeFilter.newLongRange("dateArchived-stored", 
                                       start.getTime(), 
                                       end.getTime(), true, true );

既然Lucene支持非字符串数据类型,我们是否需要像使用Term查询那样关注日期的解析?

IndexWriter需要声明MaxFieldLimit。以前的版本没有。使用UNLIMITED的行为与以前的版本相同吗?使用UNLIMITED是否最安全,因为我将阅读的索引是用2.2创建的?

在:

new IndexWriter( indexDirectory, analyzer )

后:

new IndexWriter( FSDirectory.open(indexDirectory), analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED )

排序对象需要一个SortField声明,该声明需要该字段的类型。对于使用2.2.x版本索引的现有字段,我们可以将先前索引为String的字段声明为另一种类型,还是应该始终为SortField.STRING?

在:

new Sort("timestamp", false )

后:

new Sort(new SortField("timestamp", SortField.LONG, false) )

这是否适用于2.2.x中内置的索引,但是由2.9.x读取?

最后,使用2.2.x内置的索引直接进入3.1.x会有任何问题吗?我将在本地开发系统上转换为2.9.x,但在现场它将从2.2.x直接转换到3.1.x.我是否必须使用2.9.x发布版本?

1 个答案:

答案 0 :(得分:1)

“使用UNLIMITED是最安全的”。是。该选项与已创建的文档无关。

如果您有字符串字段,则无法使用数字范围。你可以自己检查一下。