gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 08:12:42 24 4
gpt4 key购买 nike

我有这样的东西: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 类型的实例索引哪些字段。当然,缺点是您必须自己管理所有属性的索引。

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

更新:

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

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

关于java - 是否可以动态选择要在 hibernate 搜索中使用的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30156238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com