java - 未使用 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>
存储但我没有看到“索引”标志。不确定这是否是问题,因为我以相同的方式索引长值并且搜索正在工作。
有任何想法吗?
谢谢
解决方案
公平地说,我非常怀疑它是否像你描述的那样工作。
原因如下 - 所有Point类型,包括DoublePoint都只是索引字段而不是存储,因此它们甚至在 JavaDoc 中有一个注释说:
用于快速范围过滤器的索引双字段。如果您还需要存储该值,则应添加一个单独的 StoredField 实例。
你在卢克中什么也看不到的原因也很简单。卢克本身并不是魔法,它只能向您显示值,如果它们被存储(事实并非如此)。但是,您仍然可以搜索它们,只是无法检索它们。
出于调试/检索目的,您需要添加另一个存储字段,如下所示:
doc.add(new StoredField(“double_stored”, value));
推荐阅读
- node.js - 将json数组拆分为节点js中的多个json文件
- maven - Cmd 在执行 mvn -v 时存在/关闭
- python - 使用 PyRender 或类似的 Python 库手动纹理网格?
- go - 负载测试 dropwizard 端点
- java - 使用 Stream API Java 计算位置 x 处有字母“s”的单词
- sql - 将多行汇总为一
- progressive-web-apps - 使用 PWA 检测从主屏幕启动
- bash - ffmpeg 的两个变量;使用for循环?
- python-3.x - 如何使标签/按钮上的背景颜色半透明 Python
- excel - 如何使用 VBA 在 Outlook 中获取通过即时搜索找到的电子邮件?