2016-04-01 61 views
0

由於提升(如下所述),Facet搜索會引發此異常。錯誤休眠搜索方面

HSEARCH000268:刻面請求「groupArchiv」試圖面現場 「facetfieldarchiv」的或者不存在,或爲小面沒有配置 (經由@Facet)。檢查你的配置。

從hibernate.search.version 4.4.4遷移到5.5.2 hibernate.search.version

的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; 
} 
+0

你檢查@Facet註釋,如錯誤信息顯示? http://hibernate.org/search/documentation/migrate/5.3/ – Sanne

回答

2

Faceting API經歷了Hibernate Search 4和5之間的大修。在4.x系列中,可以面向任何(單值)字段而無需特殊配置。該實施基於自定義Collector

在Hibernate Search 5.x中,實現已經改變,並且使用本地Lucene faceting支持。爲此,需要在索引時間知道分面的字段。爲此,引入的註釋@Facet需要放置在用於分面的字段上。你可以在Hibernate Search在線文檔中找到更多信息,或者查看這個blog post,它給你一個簡短的變化總結。

+0

什麼幫助我:在索引時需要知道分面的字段 –

0

謝謝你的回答。 自從5.x 以來,我沒有看到這種變化。我的方面由幾個領域組成。 是否有可能使用pur Lucene在ClassBridge中構建構面? 像

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

謝謝 PE