lucene对单个域多条件检索的问题

szbszb 2009-02-17 10:33:54
我创建的索引域有title,contents,type,deptid,starttime,endtime,createdept,现在我要对索引文件进行检索,type这个域是根据用户拥有的权限增加的,例如一共有4种类型:meet,dcdb,yata,hwgl,某一用户有meet和dcdb的检索权限,那么,type就需要加入"meet"和"dcdb"两个值进行检索,某一用户只有meet的检索权限,那么type就只需要加入一个"meet"值进行检索,应该如何来添加这个检索条件?我的代码只能实现只有一个type值时可以检索出文档,如果是多个type则会将所有type下的文档全部检索出来,下列是我的代码:
public BooleanQuery documentParse(Analyzer analyzer, SearchBean searchBean)
throws Exception {
BooleanQuery bQuery = new BooleanQuery();
Term beginTime = null;
Term endTime = null;
// 时间段检索
if (StringTools.notNull(searchBean.getStrStarttime())) {
beginTime = new Term("createdate", searchBean.getStrStarttime());
}
if (StringTools.notNull(searchBean.getStrEndtime())) {
endTime = new Term("createdate", searchBean.getStrEndtime());
}
if (beginTime != null || endTime != null) {
RangeQuery query = new RangeQuery(beginTime, endTime, true);
bQuery.add(query, BooleanClause.Occur.SHOULD);
}
// 检索标题,正文
if (StringTools.notNull(searchBean.getStrQuery())) {
Query query = MultiFieldQueryParser.parse(searchBean.getStrQuery(),new String[] {"title","contents"},analyzer);
bQuery.add(query, BooleanClause.Occur.MUST);
}

//检索创建单位
if (StringTools.notNull(searchBean.getDeptid())) {
QueryParser parser = new QueryParser("createdept", analyzer);
Query query = parser.parse(searchBean.getDeptid());
bQuery.add(query, BooleanClause.Occur.MUST);
}
// 检索所属栏目
if (StringTools.notNull(searchBean.getType())) {
String[] temp = searchBean.getType().split(",");
for(int i=0;i<temp.length;i++){
if(temp.length>1){
QueryParser parser = new QueryParser("type", analyzer);
Query query = parser.parse(temp[i]);
BooleanClause.Occur occur = BooleanClause.Occur.SHOULD;
bQuery.add(query, occur);
}else{
QueryParser parser = new QueryParser("type", analyzer);
Query query = parser.parse(temp[i]);
BooleanClause.Occur occur = BooleanClause.Occur.MUST;
bQuery.add(query, occur);
}

}
}
return bQuery;
}
...全文
262 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
szbszb 2009-02-17
  • 打赏
  • 举报
回复
问题已经解决,以下是我的代码:
public BooleanQuery documentParse(Analyzer analyzer, SearchBean searchBean)
throws Exception {
BooleanQuery bQuery = new BooleanQuery();
Term beginTime = null;
Term endTime = null;
// 时间段检索
if (StringTools.notNull(searchBean.getStrStarttime())) {
beginTime = new Term("createdate", searchBean.getStrStarttime());
}
if (StringTools.notNull(searchBean.getStrEndtime())) {
endTime = new Term("createdate", searchBean.getStrEndtime());
}
if (beginTime != null || endTime != null) {
RangeQuery query = new RangeQuery(beginTime, endTime, true);
bQuery.add(query, BooleanClause.Occur.MUST); // 条件为必须完全匹配
// BooleanClause.Occur.MUST
}
// 检索标题,正文
if (StringTools.notNull(searchBean.getStrQuery())) {
Query query = MultiFieldQueryParser.parse(searchBean.getStrQuery(),new String[] {"title","contents","summary"},analyzer);
bQuery.add(query, BooleanClause.Occur.MUST); // 条件为可以模糊匹配
// BooleanClause.Occur.SHOULD
}
//检索创建单位
if (StringTools.notNull(searchBean.getDeptid())) {
QueryParser parser = new QueryParser("createdept", analyzer);
Query query = parser.parse(searchBean.getDeptid());
bQuery.add(query, BooleanClause.Occur.MUST);
}
// 检索所属栏目
if (StringTools.notNull(searchBean.getType())) {
String[] temp = searchBean.getType().split(",");
String type = "";
for(int i=0;i<temp.length;i++){
type += " "+temp[i];
}
type = type.substring(1,type.length());
Query query = MultiFieldQueryParser.parse(type,new String[] {"type"},analyzer);
bQuery.add(query, BooleanClause.Occur.MUST);
}
System.out.println(bQuery.toString());

return bQuery;
}

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧