2016-04-01 16 views
0

Seit der Aktualisierung (unten beschrieben) löst die Facettensuche diese Ausnahme aus.Fehler Hibernate Search Facet

HSEARCH000268: Facet request 'groupArchiv' versucht, Facette auf dem Feld 'facetfieldarchiv', die entweder nicht vorhanden ist oder nicht konfiguriert ist für Facettierung (via @Facet). Überprüfen Sie Ihre Konfiguration.

von hibernate.search.version Migration 4.4.4 5.5.2

lucene-queryparser 5.3.1

jdk 1.8xx

Alle Indexing ist zu hibernate.search.version über eine ClassBridge.

Das Feld 'facetfieldarchiv' befindet sich im Index.

Alle anderen Suchanfragen funktionieren gut.

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

Haben Sie den @Facet Anmerkung wie der Fehler überprüfen Meldung schlägt? http://hibernate.org/search/documentation/migrate/5.3/ – Sanne

Antwort

2

Die Facettierung API ging zwischen Hibernate Search 4 und 5 eine Überholung durch Serien in den 4.x auf einem beliebigen (einzelwertige) Feld ohne spezielle Konfiguration Facette könnte. Die Implementierung basierte auf einer benutzerdefinierten Collector.

In Hibernate Search 5.x wurde die Implementierung geändert und die native Lucene Facettierungsunterstützung verwendet. Damit dies funktioniert, müssen die facettierten Felder zur Indexzeit bekannt sein. Dazu wurde die Annotation @Facet eingeführt, die auf Feldern platziert werden muss, die zum Facettieren verwendet werden. Weitere Informationen finden Sie in den Online-Dokumenten der Hibernate Search oder unter blog post. Dort erhalten Sie eine kurze Zusammenfassung der Änderungen.

+0

Was hilft mir: die facettierten Felder müssen zum Indexzeitpunkt bekannt sein –

0

Vielen Dank für Ihre Antwort. Ich habe diese Änderung seit 5.x nicht bemerkt Meine Facetten bestehen aus mehreren Feldern. Gibt es eine Möglichkeit, die Facetten in einer ClassBridge mit pur Lucene zu erstellen? wie

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

Danke pe