使用 FlaotBridge 进行范围查询的 Hibernate Search
Hibernate Search using FlaotBridge for range queries
我正在使用 hibernate 搜索版本 5。10.x 我想搜索一个 flaot 范围。
我的领域是:
@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 来比较浮点值吗?
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;
我正在使用 hibernate 搜索版本 5。10.x 我想搜索一个 flaot 范围。
我的领域是:
@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 来比较浮点值吗?
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;