Exception Hibernate Search从版本4升级到版本5后,是什么导致方面错误?

Exception Hibernate Search从版本4升级到版本5后,是什么导致方面错误?,exception,migration,hibernate-search,facet,Exception,Migration,Hibernate Search,Facet,由于升级(如下所述),Facet搜索引发此异常 HSEARCH000268:刻面请求“groupArchiv”尝试在字段上创建刻面 “facetfieldarchiv”不存在或未配置 用于刻面(通过@Facet)。检查您的配置 从hibernate.search.version 4.4.4迁移到hibernate.search.version 5.5.2 lucene queryparser 5.3.1 jdk 1.8xx 所有索引都通过类桥 索引中有字段FaceFieldArchiv 所有其他

由于升级(如下所述),Facet搜索引发此异常

HSEARCH000268:刻面请求“groupArchiv”尝试在字段上创建刻面 “facetfieldarchiv”不存在或未配置 用于刻面(通过@Facet)。检查您的配置

从hibernate.search.version 4.4.4迁移到hibernate.search.version 5.5.2

lucene queryparser 5.3.1

jdk 1.8xx

所有索引都通过
类桥

索引中有字段
FaceFieldArchiv

所有其他搜索都正常工作

protected List<FacetBean> searchFacets(String searchQuery, String defaultField, 
                                    String onField, String facetGroupName)
{
     
    List<FacetBean> results = new ArrayList<FacetBean>();
    FullTextSession ftSession = getHibernateFulltextSession();
    org.apache.lucene.analysis.Analyzer analyzer = getAnalyzer(Archiv.class);
    QueryParser parser = new QueryParser(defaultField, analyzer);
    try
    {

        Query query = parser.parse(searchQuery);
        QueryBuilder builder = ftSession.getSearchFactory().buildQueryBuilder().forEntity(Item.class).get();

        FacetingRequest gruppeFacetingRequest = builder.facet()
                        .name(facetGroupName)
                        .onField(onField).discrete()
                        .orderedBy(FacetSortOrder.COUNT_DESC)
                        .includeZeroCounts(false)
                        .maxFacetCount(99999)
                        .createFacetingRequest();

        org.hibernate.search.FullTextQuery hibQuery = ftSession.createFullTextQuery(query, Item.class);
        FacetManager facetManager = hibQuery.getFacetManager();
        facetManager.enableFaceting(gruppeFacetingRequest);
        Iterator<Facet> itf1 = facetManager.getFacets(facetGroupName).iterator();
      
       **// The error occurs here,** 


        while (itf1.hasNext())
        {

            FacetBean bean = new FacetBean();
            Facet facetgruppe = itf1.next();
            bean.setFacetName(facetgruppe.getFacetingName());
            bean.setFacetFieldName(facetgruppe.getFieldName());
            bean.setFacetValue(facetgruppe.getValue());
            bean.setFacetCount(facetgruppe.getCount());

            results.add(bean);
        }

    } catch (Exception e)
    {

        logger.error(" Fehler FacetSuche:   " + e);
    }
    
    return results;
}
受保护的列表searchFacets(字符串searchQuery、字符串defaultField、,
字符串字段,字符串facetGroupName)
{
列表结果=新建ArrayList();
FullTextSession ftSession=GetHibernateFileTextSession();
org.apache.lucene.analysis.Analyzer=getAnalyzer(Archiv.class);
QueryParser parser=新的QueryParser(defaultField,analyzer);
尝试
{
Query=parser.parse(searchQuery);
QueryBuilder builder=ftSession.getSearchFactory().buildQueryBuilder().forEntity(Item.class.get();
FacetingRequest gruppeFacetingRequest=builder.facet()
.name(facetGroupName)
.onField(onField).discrete()
.orderedBy(FacetSortOrder.COUNT\u DESC)
.includeZeroCounts(假)
.MaxFaceCount(99999)
.createFacetingRequest();
org.hibernate.search.FullTextQuery hibQuery=ftSession.createFullTextQuery(query,Item.class);
FacetManager FacetManager=hibQuery.getFacetManager();
facetManager.enableFaceting(gruppeFacetingRequest);
迭代器itf1=facetManager.getFacets(facetGroupName).Iterator();
**//错误发生在这里,**
while(itf1.hasNext())
{
FacetBean=新的FacetBean();
Facet facetgruppe=itf1.next();
setFacetName(facetgruppe.getFacetingName());
setFacetFieldName(facetgruppe.getFieldName());
setFacetValue(facetgruppe.getValue());
setFacetCount(facetgruppe.getCount());
结果:添加(bean);
}
}捕获(例外e)
{
记录器错误(“费勒面:”+e);
}
返回结果;
}

在Hibernate Search 4和5之间,faceting API经历了一次彻底检修。在4.x系列中,可以在任何(单值)字段上刻面,而无需特殊配置。该实现基于自定义的
收集器

在HibernateSearch5.x中,实现已经改变,并且使用了本地Lucene刻面支持。但是,要使其工作,需要在索引时知道刻面字段。为此,引入了注释
@Facet
,它需要放在用于刻面的字段上。您可以在Hibernate Search online docs(Hibernate搜索在线文档)中找到更多信息,也可以查看此文档,它为您提供了更改的简短摘要。

谢谢您的回答。 我从5.x开始就没注意到这个变化 我的面由几个字段组成。 是否有可能使用pur-Lucene在类桥中构建刻面? 像

多谢各位
pe

您是否检查了@Facet注释,如错误消息所示?帮助我的是:需要在索引时知道刻面字段
FacetField f = new FacetField(fieldName, fieldValue);
document.add(f);
indexWriter.addDocument(document);