我使用的是休眠搜索版本 5.10.x,我想搜索一个浮动范围。
我的领域是:
@Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
@FieldBridge(impl = FloatBridge.class)
private Float minusPunkte = -1f;
生成 lucene 索引后,生成的索引就像预期的一样,介于 -1.0 和 150.0 之间
在卢克:
要搜索我使用的一系列值:
Float lowerTermFloat = null,
upperTermFloat = null;
try {
lowerTermFloat = StringUtils.isEmpty(lowerTerm) ? null : Float.parseFloat(lowerTerm);
upperTermFloat = StringUtils.isEmpty(upperTerm) ? null : Float.parseFloat(upperTerm);
} catch (NumberFormatException e) {
throw new HibernateSearcheParseException();
}
return NumericRangeQuery.newFloatRange(path, 4, lowerTermFloat, upperTermFloat, includeLower, includeUpper);
这将生成 lucene 的搜索字符串:
+totalPunkte:[120.0 TO *}
如果我想让所有条目都大于 120
但结果中也有小于 120 的值:
看起来,它搜索的是字符串值,而不是浮点值!
但是为什么 FloatBridge 不从浮点值生成可比较的字符串值?我怎么了?我需要自己的 Bridge 来比较浮点值吗?
答案 0 :(得分:1)
FloatBridge
是一个遗留的桥梁,早在 Lucene 不支持数字值的时候就开始了。请参阅其 javadoc:
/**
* Bridge a {@link Float} to a {@link String}.
*
* @see NumericFieldBridge#FLOAT_FIELD_BRIDGE
* @author Emmanuel Bernard
*/
要将浮点数索引为浮点数而不是字符串,根本不指定桥接器。默认情况下,Hibernate Search 会做正确的事情。
因此,您的映射变为:
@Field(index = Index.YES, analyze = Analyze.NO, store = Store.YES)
private Float minusPunkte = -1f;