是否可以 select 动态地在休眠搜索中使用一个字段

Is it possible to select dynamically a field to use in hibernate search

我有这样的东西: class答:

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

和class乙:

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

我想在索引实体 'A' 时使用 @Field 'a' ,在索引实体 'b' 时使用 @Field 'b' !有可能这样做吗? 因为 class 'B' 的 lucene 索引包含两次相同的字段 (a.someString) 但我不需要那个,我只需要一个字段用于此 class.

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

我觉得更重要的问题是,你为什么要这个条件索引?您有具体问题吗?我认为在两种情况下都添加这两个字段不会影响您的搜索性能。最多你的索引会变大一点,但除非你达到一些实际的 problem/barrier 我不会担心这个。

更新:

实际上,您可以使用一项功能来控制它。您可以使用 @IndexedEmbeddedincludePaths 属性 允许您显式控制将哪些字段添加到索引中。所以在你的情况下:

@Entity
@Indexed
public class B {
   @IndexedEmbedded(includePaths="a.b")
   @ManyToOne
   private A a;
   ......
}