【问题标题】:Questions on Upgrading Lucene from 2.2 to 2.9 to 3.1关于Lucene从2.2升级到2.9到3.1的问题
【发布时间】:2011-09-12 04:51:33
【问题描述】:

我有一个使用 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 是否与以前版本中的行为相同?考虑到我要读取的索引是使用 2.2 创建的,因此使用 UNLIMITED 是否最安全?

之前:

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 发布版本?

【问题讨论】:

    标签: java lucene


    【解决方案1】:

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

    如果您有字符串字段,则不能对它们使用数字范围。您可以自行检查。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-14
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多