[英]polymorphic queries in hibernate search
我尝试简化我的问题,我有A类:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class A {
@Field
private String a;
....
}
B类扩展了A类:
@Entity
@Indexed
public class B extends A {
@Field
private String b;
....
}
扩展A的另一个C类:
@Entity
@Indexed
public class C extends A {
@Field
private String c;
....
}
我的问题是,当我执行多态查询时:
Query query = queryBuilder.keyword().onField("a").matching(a).createQuery();
它工作得很好,没问题,但是当字段是b或c时:
uery query = queryBuilder.keyword().onField("b").matching(b).createQuery();
我有一个例外:org.hibernate.search.SearchException:无法在C中找到字段b是否有解决方案,还是应该执行非多态查询? 可能是我在某处出错。 感谢您的帮助。
您基本上遇到了查询DSL的限制。 目前,它仅支持为单个索引类型创建查询。 另请参阅HSEARCH-1851 。
解决方法是,您可以恢复编写本机Lucene查询。 多态查询应该起作用。
如果要使用DSL,则需要为要定位的特定子类创建QueryBuilder
实例。
对于那些有相同问题的人,请使用lucene TermQuery:
org.apache.lucene.search.TermQuery termQuery = new TermQuery("field", "term"));
luceneBooleanQuery.add(termQuery, BooleanClause.Occur.MUST);
如果字段为数字(int,double,...),请使用lucene NumericRangeQuery:
NumericRangeQuery<Double> numericQuery = NumericRangeQuery.newDoubleRange("numericField", minRange, maxRange, true, true);
luceneBooleanQuery.add(numericQuery, BooleanClause.Occur.MUST);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.