使用固定值动态限制hibernate-search查询。

时间:2013-10-11 19:25:41

标签: java hibernate lucene hibernate-search

我想知道如何限制使用固定值的hibernate-search查询,例如,如果我正在对电子商店进行自由文本搜索,他们在URL中有值将结果限制为计算机只要。或者另一示例可以是基于位置进行搜索。

当前代码

@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);

有人知道我缺少什么才能让它发挥作用吗?

1 个答案:

答案 0 :(得分:0)

我假设使用.bool()这样的限制hibernate-search查询的正确方法。

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();

如果我走在正确的轨道上,有人可以发表评论让我知道吗?