错误Hibernate Search Facet

时间:2016-04-01 12:57:15

标签: exception migration hibernate-search facet

由于uprading(如下所述),Facet搜索会抛出此异常。

  

HSEARCH000268:Facet request' groupArchiv'试图在场上刻面   ' facetfieldarchiv'哪个不存在或未配置   用于分面(通过@Facet)。检查您的配置。

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

lucene-queryparser 5.3.1

jdk 1.8xx

所有索引均通过ClassBridge进行。

该领域' facetfieldarchiv'在索引中。

所有其他搜索工作正常。

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;
}

2 个答案:

答案 0 :(得分:2)

分面API在Hibernate Search 4和5之间进行了大修。在4.x系列中,无需特殊配置即可在任何(单值)字段上进行切换。该实施基于自定义Collector

在Hibernate Search 5.x中,实现已更改,并使用了本机Lucene faceting支持。为了实现这一点,需要在索引时知道分面字段。为此,引入了注释@Facet,它需要放在用于分面的字段上。您可以在Hibernate Search在线文档中找到更多信息,或查看此blog post,其中提供了更改的简短摘要。

答案 1 :(得分:0)

感谢您的回答。 自5.x以来我没有发现这种变化 我的方面由几个领域组成。 是否有可能使用pur Lucene在ClassBridge中构建小平面? 像

FacetField f = new FacetField(fieldName, fieldValue);
document.add(f);
indexWriter.addDocument(document);

谢谢 PE