为了使用Lucene进行搜索,我做了一个桥,
public class EntityIDFieldBridge implements FieldBridge {
@Override
public void set(String name, Object value, Document document, LuceneOptions luceneOptions) {
BaseEntity baseEntity = (BaseEntity) value;
if(value !=null){
Field field = new LongField(name, baseEntity.getId(),Field.Store.NO);
document.add(field);
}
}
}
当我搜索值时,我没有得到正确的文档。当我搜索词:* 时,我得到了不为空的文档,所以我看到它正在被索引.... StringField工作正常。但我认为它应该是一个长字段。有什么想法吗?
1条答案
按热度按时间k97glaaz1#
根据您提供的少量信息,我假设您不会尝试获取
null
的值。Field Bridge提供了关于它是什么、lucene支持什么以及它如何工作的更多信息:
在Lucene中,所有的索引字段都必须表示为String。因此,所有用@Field标注的实体属性都必须以String形式进行索引。对于大多数属性,Hibernate Search都可以通过一组内置的桥为您完成转换工作。在某些情况下,尽管您需要对转换过程进行更细粒度的控制。
也适用于Null值
空元素不被索引。Lucene不支持空元素,这也没有多大意义。