是否可以 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 我不会担心这个。
更新:
实际上,您可以使用一项功能来控制它。您可以使用 @IndexedEmbedded
的 includePaths
属性 允许您显式控制将哪些字段添加到索引中。所以在你的情况下:
@Entity
@Indexed
public class B {
@IndexedEmbedded(includePaths="a.b")
@ManyToOne
private A a;
......
}
我有这样的东西: 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 我不会担心这个。
更新:
实际上,您可以使用一项功能来控制它。您可以使用 @IndexedEmbedded
的 includePaths
属性 允许您显式控制将哪些字段添加到索引中。所以在你的情况下:
@Entity
@Indexed
public class B {
@IndexedEmbedded(includePaths="a.b")
@ManyToOne
private A a;
......
}