Exception Hibernate Search从版本4升级到版本5后,是什么导致方面错误?
由于升级(如下所述),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 所有索引都通过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 所有其他
类桥
索引中有字段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);