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

标签 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 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/

相关文章:

java - 无法通过 Apache Camel 访问外部 HTTP 服务

java - 持续的消费者群体重新平衡,消费者多于分区

sql - 尝试持久化实体时,具有相同标识符值的不同对象已与 session 关联

java - Hibernate 中集合未正确加载

search - 仅从 Lucene 搜索中返回某些字段

java - 无法从 Spring boot 的 RestController 检索对象到 Angular 6 服务

java - 如何计算字符串中的大写和小写字母?

java - 使用 JPA 时多个数据源抛出错误

c# - Sitecore 检查索引是否完整

java - Lucene 中的关键字(OR,AND)搜索