• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
皇图霸业谈笑间
更高、更快、更强
博客园    首页    新随笔    联系   管理    订阅  订阅
lucene组合搜索总结
  1.     // 与或搜索BooleanQuery  
  2.     //BooleanClause用于表示布尔查询子句关系的类,包括:BooleanClause.Occur.MUST,BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.SHOULD。有以下6种组合:  
  3.   
  4.     //1.MUST和MUST:取得连个查询子句的交集。  
  5.   
  6.     //2.MUST和MUST_NOT:表示查询结果中不能包含MUST_NOT所对应得查询子句的检索结果。  
  7.   
  8.     //3.MUST_NOT和MUST_NOT:无意义,检索无结果。  
  9.   
  10.     //4.SHOULD与MUST、SHOULD与MUST_NOT:SHOULD与MUST连用时,无意义,结果为MUST子句的检索结果。与MUST_NOT连用时,功能同MUST。  
  11.   
  12.     //5.SHOULD与SHOULD:表示“或”关系,最终检索结果为所有检索子句的并集。 


 

另外, 你还可以在以上的组合之上再次组合,下面是我的应用示例

 

 

            BooleanQuery.SetMaxClauseCount(int.MaxValue);
            List<SimpleBookInfo> books = new List<SimpleBookInfo>();

            WildcardQuery wq1 = new WildcardQuery(new Term("author", "*" + author + "*"));
            WildcardQuery wq2 = new WildcardQuery(new Term("bookname", "*" + bookname + "*"));

            BooleanQuery query = new BooleanQuery();
            BooleanQuery searchQuery = new BooleanQuery();
            if (should)
            {
                searchQuery.Add(wq1, BooleanClause.Occur.SHOULD);
                searchQuery.Add(wq2, BooleanClause.Occur.SHOULD);
            }
            else
            {
                searchQuery.Add(wq1, BooleanClause.Occur.MUST);
                searchQuery.Add(wq2, BooleanClause.Occur.MUST);
            }

            query.Add(searchQuery, BooleanClause.Occur.MUST);
            if (!string.IsNullOrEmpty(Original))//2012-01-07增加正版字段过滤
            {
                if (Original.Equals("0"))
                {
                    Original = "00000000000000";//索引值竟然生成了这个MD
                }
                if (Original.Equals("1"))
                {
                    Original = "00000000000001";//索引值竟然生成了这个MD
                }
                TermQuery qu = new TermQuery(new Term("original", Original));
                query.Add(qu, BooleanClause.Occur.MUST);
            }
posted on 2012-01-07 17:35  布颜书  阅读(365)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3