繁体   English   中英

休眠搜索中的多态查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM