我有一个使用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 );
Run Code Online (Sandbox Code Playgroud)
后:
return NumericRangeFilter.newLongRange("dateArchived-stored",
start.getTime(),
end.getTime(), true, true );
Run Code Online (Sandbox Code Playgroud)
现在Lucene支持非字符串数据类型,我们是否需要像使用Term查询一样关注日期的解析?
IndexWriter需要声明MaxFieldLimit.以前的版本没有.使用UNLIMITED的行为与以前的版本相同吗?使用UNLIMITED是最安全的,因为我将阅读的索引是用2.2创建的吗?
之前:
new IndexWriter( indexDirectory, analyzer )
Run Code Online (Sandbox Code Playgroud)
后:
new IndexWriter( FSDirectory.open(indexDirectory), analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED )
Run Code Online (Sandbox Code Playgroud)
排序对象需要一个SortField声明,该声明需要该字段的类型.对于使用2.2.x版本索引的现有字段,我们可以将先前索引为String的字段声明为另一种类型,还是应该始终为SortField.STRING?
之前:
new Sort("timestamp", false )
Run Code Online (Sandbox Code Playgroud)
后:
new Sort(new SortField("timestamp", SortField.LONG, false) )
Run Code Online (Sandbox Code Playgroud)
这是否适用于2.2.x中内置的索引,但是由2.9.x读取?
最后,使用2.2.x内置的索引直接进入3.1.x会有什么问题吗?我将在本地开发系统上转换为2.9.x,但在现场它将从2.2.x直接转换到3.1.x. 我是否必须使用2.9.x发布版本?
| 归档时间: |
|
| 查看次数: |
728 次 |
| 最近记录: |