2013-10-11 2 views
0

난 고정 값을 가진 최대 절전 모드 - 검색 쿼리를 제한하는 방법에 대해 궁금하네요. 예를 들어 URL에 값을 컴퓨터에만 저장하도록 제한하는 전자 제품 매장에 대한 자유 텍스트 검색을한다면 . 또는 다른 예는 위치를 기반으로 검색을 수행하는 것일 수 있습니다.고정 값으로 hibernate-search query를 동적으로 제한합니다.

현재 코드

@Entity 
@Indexed 
public class Store { 

    @Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO) 
    private String name; 

    @IndexedEmbedded 
    @OneToMany(mappedBy = "computer", cascade = CascadeType.ALL, orphanRemoval = true) 
    private List<Computer> computers; 
} 

@Entity 
public class Computer { 

    @Field 
    private String name; 

    @ContainedIn 
    @ManyToOne 
    @JoinColumn(name = "store_id", nullable = false) 
    private Store Store; 
} 

키워드 검색 쿼리

FullTextSession fullTextSession = Search.getFullTextSession(sessionManager.getSession()); 
     QueryBuilder queryBuilder = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Store.class).get(); 
     Query luceneQuery = queryBuilder.keyword().onFields("name").andField("computers.name").matching(keyword).createQuery(); 

     org.hibernate.search.FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(luceneQuery, Computer.class); 

사람이 내가이 작업을 얻을 누락 알고 있나요?

답변

0

최대 절전 모드 검색 쿼리를 제한하는 적절한 방법은 .bool()을 사용하여 수행 할 것이라고 가정합니다.

String store = "Orlando Electronics"; 

Query luceneQuery = queryBuilder.bool() 
       .should(queryBuilder.keyword().onFields("name").matching(store).createQuery()) 
       .must(queryBuilder.keyword().onFields("computers.name").matching("Dell").createQuery()) 
       .createQuery(); 

누군가 내가 올바른 방향으로 가고 있는지 알려 주실 수 있습니까?

+0

맞아, 맞아. – Hardy

관련 문제