【发布时间】:2015-04-16 00:50:17
【问题描述】:
我正在尝试实现休眠全文搜索。用户可以选择哪些字段与搜索相关或不相关。这是通过 JSF 中的六个(我的示例)布尔复选框来完成的。
六个布尔值表示 2^6 种可能的组合。我需要映射所有这些条件。
例子:
boolean a;
boolean b;
boolean c;
boolean d;
boolean e;
boolean f;
if(a){
// do a search with a
}
..
if(a && b){
// do a search with a and b only
}
..
if(a && b && c){
// do a search with a and b and c only
}
在每个 IF 语句中,都应该调用一个方法。
基于我的案例的特别示例:
用户想要搜索具有姓和/或名字的用户。
org.apache.lucene.search.Query luceneQuery = qb.keyword()
.onFields("user.surname", "user.givenname")
.matching(searchstring).createQuery();
条件:
QueryBuilder qb = fullTextEntityManager.getSearchFactory()
.buildQueryBuilder().forEntity(BeitragVO.class).get();
if(user){
org.apache.lucene.search.Query luceneQuery = qb.keyword()
.onFields("user.surname", "user.givenname")
.matching(searchstring).createQuery();
}
if(company){
org.apache.lucene.search.Query luceneQuery = qb.keyword()
.onField("company.name")
.matching(searchstring).createQuery();
}
if(student && company){
// How can I add all relevant fields(givenname, surname, and name of
company) to the query?
}
有没有办法比 64 IF 做得更好?
【问题讨论】:
-
// do a search with a and b and c only实际上是什么样子的? -
您应该将“使用
a进行搜索”封装到某种A对象中。然后使用Set或SearchCriterion或类似的东西。 -
我也更新了我的问题。我真的错过了这一点,谢谢@AnthonyGrist
-
Alexander,我想这是我的错误,试图修改我的问题以向您展示如何通过尝试编写代码来实现您的目标。所以,我用所有这些修改删除了我的答案,并用我原来的答案替换了它,只有一个修改将我的答案与 lucene 联系起来。这个答案保持原样。您可以等待,看看其他人是否发布了一个答案,该答案为您提供了您需要的实际可运行代码。
-
没问题,迈克。我还是猜,你没明白我的意思。但是没关系!我真的很高兴,你已经尽力了!
标签: java hibernate if-statement conditional-statements hibernate-criteria