2013-11-01 28 views
0

同一字段中指定兩種類型的搜索。如果我對一個類的同一個字段中指定兩種類型的搜索(匹配和模糊),如下所示:Hibernate Search的 - 一類

QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get(); 
    qb.bool().should(qb.keyword().onField("name").matching(searchQuery).createQuery()) 
    .should(qb.keyword().fuzzy().withPrefixLength(1).onField("name").matching(searchQuery).createQuery()); 

請問搜索上述最終被:

MATCHING searchQuery against "name" OR Fuzzy searchQuery against "name" 

回答

3

我相信你可能會丟失一個createQuery()底,但除此之外,看起來很合理的,我的,但你可以隨時查詢自己。一旦創建了最終查詢,只要使用Query.toString()方法,只要您熟悉Lucene查詢語法分析器語法,就可以爲您提供人類可讀的查詢表示。像:

QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get(); 
Query query = qb.bool() 
    .should(qb.keyword().onField("name").matching(searchQuery).createQuery()) 
    .should(qb.keyword().fuzzy().withPrefixLength(1).onField("name").matching(searchQuery).createQuery()) 
.createQuery(); 

System.out.println(query.toString()) 
//Or however you like to output debugging information...