首页 > 解决方案 > 未使用 Lucene 7 索引的双精度值

问题描述

你好,

我没有设法用 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> 

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

有任何想法吗?

谢谢

标签: javalucene

解决方案


公平地说,我非常怀疑它是否像你描述的那样工作。

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

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

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

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

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

推荐阅读