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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章