【问题标题】:double value not indexed with Lucene 7未使用 Lucene 7 索引的双精度值
【发布时间】:2019-01-17 14:58:23
【问题描述】:

你好,

我无法使用 Lucene 7 索引双精度值。 执行后

public void indexDouble(Document document, String name, Double value) {
  double val = (double) value;
  document.add(new DoublePoint(name, val));
}

我正在使用 Luke 检查索引值,并且该索引的值始终为空。

在文档中添加一个DoublePoint后(我的例子是44),调试的时候可以看到值被添加了

 DoublePoint <9xjcl4v4r:vq4ebgph8:44.0> stored<9xjcl4v4r:vq4ebgph8:44.0> 

已存储,但我没有看到“索引”标志。不确定这是否是问题,因为我以相同的方式索引长值并且搜索正在工作。

有什么想法吗?

谢谢

【问题讨论】:

    标签: java lucene


    【解决方案1】:

    为了公平起见,我非常怀疑它是否如您所描述的那样工作。

    原因如下 - 所有 Point 类型,包括 DoublePoint 都只是索引字段而不是存储,因此它们甚至在 JavaDoc 中都有注释:

    用于快速范围过滤器的索引双字段。如果您还需要 存储值,您应该添加一个单独的 StoredField 实例。

    您在 Luke 中什么也看不到的原因也很简单。 Luke 本身并不是魔法,它只能向您显示值,如果它们被存储(事实并非如此)。但是,您仍然可以搜索它们,只是无法检索它们。

    出于调试/检索目的,您需要添加另一个存储字段,如下所示:

    doc.add(new StoredField(“double_stored”, value));
    

    【讨论】:

    • 是的,没错,我刚刚意识到 Luke 只显示存储的值而不是索引。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 2014-11-06
    • 2017-02-23
    • 1970-01-01
    • 2017-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多