在Hibernate Search StringBridge中返回Null

时间:2018-02-20 20:07:28

标签: hibernate hibernate-search

我正在阅读StringBridge接口的javadoc注释和它所说的objectToString方法

  

返回字符串不能为null。它可以是空的。

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

1 个答案:

答案 0 :(得分:1)

据我所知,null在索引编制过程中会被安全处理,并且会被忽略,除非你在字段定义中设置indexNullAs,在这种情况下,空标记将被编入索引。

编辑:此外,是的,在索引编制实际上会被忽略时返回空字符串,因为搜索不会匹配空字符串。

但是,您的网桥返回的空值是而不是安全处理:

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

所以,如果:

,那么你应该是安全的
  • 您不使用分面
  • 您不能使用此网桥作为文档标识符(@DocumentId
  • 查询时使用ignoreFieldBridge,或者只传递您知道不会导致桥返回空值的值

你现在必须注意到,根本不能返回空值...

来源:查看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