我有这样的东西: 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;
......
}
关于java - 是否可以动态选择要在 hibernate 搜索中使用的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156238/