由于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;
}
答案 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