2012-11-21 1 views
2

은 내가 제품 테이블이 있으며 필드를 이름, SKU, 설명제품 카테고리 (제품 카테고리 테이블과 하나의 관계에 많은)가 있습니다. 나는 최대 절전 모드 검색을 사용하여 제품 색인 및 검색을 수행하려면 다음 코드를 작성했습니다 :ManytoOne에서 where 절을 적용하는 방법 최대 절전 모드 검색의 Join 필드?

FullTextEntityManager fullTextEntityManager = org.hibernate.search.jpa.Search 
      .getFullTextEntityManager(getEntityManager()); 
QueryBuilder qb = fullTextEntityManager.getSearchFactory() 
      .buildQueryBuilder().forEntity(Product.class).get(); 

    org.apache.lucene.search.Query query = qb.keyword().fuzzy() 
      .onFields("name", "sku", "uniqueid", "description") 
      .matching(value).createQuery(); 
    javax.persistence.Query persistenceQuery = fullTextEntityManager 
      .createFullTextQuery(query, Product.class); 

가 지금은 제품 범주에 WHERE 조건을 추가하고 싶습니다. 예를 들어 productCategory.Id = 101 인 제품 만 검색하려고합니다.

아무도 내가 이것을 할 수있는 방법을 제안 할 수 있습니까? 이 같은

Query fuzzyQuery = qb.keyword() 
    .fuzzy() 
    .onFields("name", "sku", "uniqueid", "description") 
    .matching(value) 
    .createQuery(); 

Query categoryQuery = qb.keyword() 
    .onField("productCategory.Id") 
    .matching("101") 
    .createQuery(); 

Query luceneQuery = qb 
    .bool() 
     .should(fuzzyQuery) 
     .must(categoryQuery) 
    .createQuery(); 

뭔가 : & 감사 비제이이 같은

답변

2

뭔가 일을해야

덕분에 (당신은 부울를 사용하여 쿼리를 결합해야합니다). 실제로 엔티티 구성 방법에 따라 다릅니다. 실제로 예제를 만들 때 테이블이 아니라 엔티티에 대해 이야기하고 주석이 달린 엔티티에 대한 코드를 게시해야합니다.

+0

답장을 보내 주셔서 감사합니다. 내 Product 도메인 클래스에서 -ManyToOne과 같은 Cateogry를 주석으로 처리했습니다. \t -JoinColumn (name = "PL_PRODUCTCATEGORY_ID") -IndexedEmbedded \t private ProductCategory Productcategory; 그리고 ProductCategory 도메인 클래스에 나는 \t - AnnToMany (mappedBy = "Productcategory")로 제품을 주석으로 표시했습니다. \t -ContainedIn \t 개인 목록 제품; – VijayM

+0

카테고리를 기반으로 찾을 수있는 가장 좋은 방법을 제안 해 주시겠습니까? – VijayM

+0

언급 한 모든 주석은 JPA (ORM) 매핑 주석입니다. Hibernate Search를 통해 연관을 색인하고 검색하려면 @IndexedEmbedded을 사용해야합니다. 예제를 보려면 설명서를보십시오. – Hardy