是否可以动态选择要在休眠搜索中使用的字段

时间:2015-05-10 20:19:32

标签: java hibernate lucene hibernate-search

我有这样的事情: A级:

@Entity
@Indexed
public class A {
   @Fields({
      @Field(name="a"....)
      @Field(name="b"....)
   )}
   private String someField;
      ....
   }
}

B班:

@Entity
@Indexed
public class B {
   @IndexedEmbedded
   @ManyToOne
   private A a;
   ......
}

我想使用@Field' a'索引etity' A'和@Field' b'索引实体' b' !有可能吗? 因为lucene索引为班级' B'包含相同的字段两次(a.someString)但我不需要,我只需要一个字段用于此类。

1 个答案:

答案 0 :(得分:1)

仅使用注释是不可能的。一种解决方案是为类a中的多对一关联B编写自定义字段桥。通过编写自定义字段桥,您可以控制自己要为类型A的实例编制索引的字段。当然,缺点是您必须自己管理所有属性的索引。

更重要的问题是,为什么你想要这个条件索引?你有特定的问题吗?我不认为在这两种情况下添加两个字段都会影响您的搜索性能。最多你的索引会变得更大,但除非你遇到一些实际的问题/障碍,否则我不会担心这个。

<强>更新

实际上,您可以使用一项功能来控制它。您可以使用includePaths的{​​{1}}属性,允许您明确控制将哪些字段添加到索引中。所以在你的情况下:

@IndexedEmbedded