在 Hibernate Search StringBridge 中返回 Null

Returning Null in Hibernate Search StringBridge

我正在阅读 StringBridge 接口的 javadoc 注释以及上面写的 objectToString 方法

The return string must not be null. It can be empty though.

我想知道这是什么原因。我的印象是在写入索引时会忽略空值,这正是我的目标。是这种情况还是返回 null 会导致问题?如果是,是否会在索引期间忽略返回空字符串?

据我所知,null 在索引期间被安全处理并且将被忽略,除非您在字段定义中设置 indexNullAs,在这种情况下,空标记将被索引。

编辑:此外,是的,return在索引时输入空字符串将被有效地忽略,因为搜索不会匹配空字符串。

但是,return由您的网桥编辑的空值安全处理:

  • 查询时,因为我们通常希望输入值为空,而不是桥的输出,当我们想在索引中查找空值时。
  • 用于文档标识符中的桥梁,显然必须始终 return 一个 non-null 结果
  • 当 属性 值不为 null 并且您的桥将其变为 null 值时用于分面(这可能是一个错误)

所以如果满足以下条件,您应该是安全的:

  • 你没有使用分面
  • 您没有将此桥用于文档标识符 (@DocumentId)
  • 您在查询时使用 ignoreFieldBridge,或者您只传递您知道不会导致空值被桥return编辑的值

您现在一定已经注意到,完全不 return 空值更简单...

来源:查看了 Hibernate Search 5.10.0-SNAPSHOT 中的源代码(在这种特定情况下,它可能与大多数早期版本相同)。

  • org.hibernate.search.query.dsl.impl.ConnectedMultiFieldsTermQueryBuilder#createQuery(org.hibernate.search.query.dsl.impl.FieldContext, org.hibernate.search.bridge.spi.ConversionContext)
  • org.hibernate.search.bridge.util.impl.String2FieldBridgeAdaptor#set
  • org.hibernate.search.engine.spi.DocumentBuilderIndexedEntity#addFacetDocValues