2016-04-01 6 views
0

Поскольку исправление (описано ниже), поиск по грантам вызывает это исключение.Ошибка поиска в спящем режиме

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

Огранка API, прошел капитальный ремонт между Hibernate Search 4 и 5. В серии 4.x можно фасет на любой (одноверсионном) поле без специальной конфигурации. Реализация была основана на пользовательском Collector.

В Hibernate Search 5.x реализация была изменена, и используется базовая поддержка огнетушения Lucene. Однако для этого необходимо, чтобы ограненные поля были известны во время индекса. Для этого была введена аннотация @Facet, которая должна быть помещена на поля, используемые для огранки. Вы найдете дополнительную информацию в онлайн-документах Hibernate Search или проверьте это blog post, в котором вы найдете краткое описание изменений.

+0

Что мне помогает: ограненные поля должны быть известны во время индекса –

0

Благодарим за ответ. Я не поймал это изменение с 5.x Мои грани состоят из нескольких полей. Есть ли возможность построить грани в ClassBridge, используя Pur Lucene? как

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

Спасибо ре