【问题标题】:Using Lucene API to show float field from Solr index使用 Lucene API 显示来自 Solr 索引的浮点字段
【发布时间】:2012-01-19 07:37:28
【问题描述】:

我继承了一些使用 Lucene API 来查询 Solr 索引的代码。

代码做了很多搜索,最后将所有找到的lucene文档转换为solr文档:

// doc:Document

val sdoc = new SolrDocument

for (f:Fieldable <- doc.getFields if f.isStored) {
  sdoc.addField(f.name(),f.stringValue())
}

这很好用,除非字段值不是字符串,例如浮点数或布尔值。在浮点字段上,stringValue() 返回一些奇怪的字符(例如 ¿£൱),大概是浮点数的字符串表示。

如何从 Lucene 文档中正确获取浮点值?

【问题讨论】:

  • 你是如何存储浮点数的?你用的是哪个版本的lucene?使用 Luke 检查时,您看到正确的值了吗?

标签: api solr lucene floating-point


【解决方案1】:

对于存储为二进制值的数字,您需要通过 doc.getBinaryValue(fieldName) 您将获得 byte[] 作为返回值,您必须将其转换将其转换为适当的数值。这是你可以做的:

if(!field.isBinary()){
    sdoc.addField(fieldName, doc.get(fieldName));
} else{
    ByteBuffer buff = ByteBuffer.wrap(doc.getBinaryValue(fieldName));
    sdoc.addField(fieldName, buff.getFloat());
}

这里有一个SO Quetion,可提供转换帮助。

【讨论】:

  • 如果字段是 sdouble (SortableDouble) 怎么办?代码运行到 sdouble 的非二进制字段块,结果,我得到了一个奇怪的字符串,如“@#sV7&”...感谢您的帮助!
  • NumberUtils.SortableStr2doubleStr(indexedForm);
猜你喜欢
  • 1970-01-01
  • 2013-11-06
  • 2011-10-26
  • 2012-09-05
  • 1970-01-01
  • 1970-01-01
  • 2016-04-29
  • 2011-07-16
  • 2011-12-20
相关资源
最近更新 更多