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

Java 是否可以在hibernate搜索中动态选择要使用的字段,java,hibernate,lucene,hibernate-search,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类:

@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;
   ......
}
我想在索引实体“a”时使用@Field“a”,在索引实体“b”时使用@Field“b”!有可能吗?
因为类“B”的lucene索引包含相同的字段两次(a.someString),但我不需要它,我只需要这个类的一个字段。

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

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

更新:

事实上,有一个功能可以用来控制它。您可以使用
@IndexedEmbedded
includePaths
属性来显式控制将哪些字段添加到索引中。因此,在你的情况下:

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

谢谢Hardy,这不是性能问题,我只是不想要一个没有充分使用的更大的索引。您是否比较了大小,看看两种情况下索引大小的差异有多大?是的,有可能,使用'@IndexedEmbedded'(includePaths='指定它应该包含哪些字段名。当您使用此功能时,所有其他字段都将被排除。@Hardy您能修改您的答案吗?Tanks Sanne,我刚刚在《hibernate搜索示例》一书中看到了这一点