lucene,基于QueryParser的搜索

 
 
  1.     public void queryParse(Query query , int num ){ 
  2.         try { 
  3.             TopDocs tds = this.searcher.search(query, num); 
  4.             System.out.println("查询到的结果数:"+tds.totalHits); 
  5.             for(ScoreDoc sd : tds.scoreDocs){ 
  6.                 doc = this.searcher.doc(sd.doc); 
  7.                 System.out.println("id:"+doc.get("id")+"---"+"name:"+doc.get("name")+"---"+"attachs:"+doc.get("attach")+"---"+"email:"+doc.get("email")); 
  8.             } 
  9.         } catch (IOException e) { 
  10.             // TODO Auto-generated catch block 
  11.             e.printStackTrace(); 
  12.         } finally { 
  13.             try { 
  14.                 this.searcher.close(); 
  15.             } catch (IOException e) { 
  16.                 // TODO Auto-generated catch block 
  17.                 e.printStackTrace(); 
  18.             } 
  19.         } 
  20.     } 
  21.  
  22. @Test 
  23.     public void testQueryParse() throws Exception{ 
  24.         //创建QueryParser对象 默认的搜索域为content 
  25.         QueryParser parser = new QueryParser(Version.LUCENE_35, "content"new StandardAnalyzer(Version.LUCENE_35)); 
  26.         //设置 空格的默认操作符为 AND  默认为OR 
  27. //      parser.setDefaultOperator(Operator.AND); 
  28.         //开启第一个字符的通配符配置 
  29.         parser.setAllowLeadingWildcard(true); 
  30.         //搜索content中包含like的 
  31.         Query query = parser.parse("like"); 
  32.          
  33.         //既有like又有football的 
  34.         query = parser.parse("like foot ball"); 
  35.          
  36.         //域name为5555的 
  37.         query = parser.parse("name:5555"); 
  38.          
  39.         //在查询中加入通配符配置 
  40.         query = parser.parse("name:5*"); 
  41.          
  42.         //通配符默认不能放在首位 
  43.         query = parser.parse("name:*6"); 
  44.          
  45.         //查询content中包含kenan的 从中减去name为333的 加上id为6的 
  46.         query = parser.parse("kenan -name:333 +id:6"); 
  47.          
  48.         //字符串id从1到3 匹配一个区间 包含两边 
  49.         query = parser.parse("id:[1 TO 3]"); 
  50.                  
  51.         //字符串id从1到3 匹配一个区间 不包含两边 
  52.         query = parser.parse("id:{1 TO 3}"); 
  53.                  
  54.         //匹配 content包含foot ball这个字符串的 
  55.         query = parser.parse("\"foot ball\""); 
  56.          
  57.         //like 和ball之间的距离小于等于2的  距离是他们之间的单词个数 
  58.         query = parser.parse("\"like ball\"~2"); 
  59.          
  60.         //模糊查询 
  61.         query = parser.parse("kenak~"); 
  62.         su.queryParse(query, 10); 
  63.     } 

 

本文出自 “Kenan_ITBlog” 博客,请务必保留此出处http://soukenan.blog.51cto.com/5130995/1122358

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值