我正在用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