我正在用Java EE,Hibernate Search,JPA和JSF编写Web应用程序。休眠搜索分面不工作
我一直在读一遍又一遍的hibernate搜索文档,但我只是不能正确地工作。
我有一个数据库,其中包括几个分类。我以足球俱乐部为例。
我有德国的类别,其中有德甲联赛,德甲联赛等等。 我也有一个名为ChampionsLeague,EuroLeague和代表不同国家的其他联赛。
如果我搜索“Deutschland”,Hibernate Search为我提供了在德国玩的所有足球俱乐部的正确列表。一些足球俱乐部参加ChampionsLeague和Euroleage。在左侧导航栏中的Faceting为我提供了德国俱乐部参与的类别,并显示了正确的facetedCount。
问题是,如果我点击其中一个类别,Hibernate Search会显示我在此类别中的所有俱乐部,而不仅仅是我在初次搜索时搜索过的德国俱乐部。
有谁可以告诉我如何解决这个问题?
这里是我的代码: SearchBean:
public void startKeywordSearch(){
fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
qb = fullTextEntityManager.getSearchFactory().buildQueryBuilder().forEntity(Company.class).get();
query = qb
.keyword()
.fuzzy().withEditDistanceUpTo(1).withPrefixLength(0)
.onFields("companyName", "companyShortDescription", "companyLongDescription", "categoryList.categoryName", "and so on")
.matching(keyword)
.createQuery();
categoryNameFacetingRequest = qb.facet()
.name("categoryNameFacet")
.onField("categoryList.categoryName_forFaceting")
.discrete()
.orderedBy(FacetSortOrder.COUNT_DESC)
.includeZeroCounts(false)
.maxFacetCount(100)
.createFacetingRequest();
persistenceQuery = fullTextEntityManager.createFullTextQuery(query, Company.class);
facetManager = fullTextEntityManager.createFullTextQuery(query, Company.class).getFacetManager();
facetManager.enableFaceting(categoryNameFacetingRequest);
result = persistenceQuery.getResultList();
facetResults = facetManager.getFacets("categoryNameFacet");
searchCount = result.size();
这里是我的addFacet方法代码:
public void addFacet(Facet facet) {
fullTextEntityManager = org.hibernate.search.jpa.Search.getFullTextEntityManager(em);
Query luceneQuery = facet.getFacetQuery();
persistenceQuery = fullTextEntityManager.createFullTextQuery(luceneQuery, Company.class);
facetManager.enableFaceting(categoryNameFacetingRequest);
result = persistenceQuery.getResultList();
facetResults = facetManager.getFacets("categoryNameFacet");
FacetSelection facetSelection = facetManager.getFacetGroup("categoryNameFacet");
facetSelection.selectFacets(facet);
result = persistenceQuery.getResultList();
和多数民众的代码生成我的链接:
<div>
<h:form id="facetForm">
<ul>
<ui:repeat value="#{searchBean.facetResults}" var="facet">
<li><h:commandLink value="#{facet.value}" action="#{searchBean.addFacet(facet)}">
<f:ajax render="@all" />
</h:commandLink> (#{facet.count})</li>
</ui:repeat>
</ul>
</h:form>
</div>
我仍然不会在facetSelection工作,我想,那@Facet注释嵌入的关系似乎是一个问题。 我通过使用BooleanQuery解决了这个问题。感谢提示 – Rallenaldo