国产一区二区精品久久_蜜桃狠狠狠狠狠狠狠狠狠_午夜视频精品_激情都市一区二区

當前位置:首頁 > 網站舊欄目 > 學習園地 > 設計軟件教程 > Lucene進階:and 和or的條件查詢

Lucene進階:and 和or的條件查詢
2010-01-13 23:10:41  作者:  來源:
  在用Lucene實現全站搜索的過程中,很可能會遇到這樣的問題,只所有某種特定的信息資源,而不是全部.如:某綜合性站點,有新聞,產品,論壇,Blog,視頻等資源,而搜索的時候先選一個類型(下拉列表),再輸入關鍵字進行搜索(當然,這種情況可以直接用sql來實現,我們這里是基于lucene的實現考慮).這種情況下,就要用到and和or的查詢了.這里假設索引已經建立好了(如何建立索引請參考:http://www.javaeye.com/topic/125599),索引字段為title(標題), type(資源類型,表示新聞還是產品,product為產品,news表新聞),則實現方法如下:
Java代碼 復制代碼
  1. /**  
  2. * 根據信息分類和關鍵詞進行查詢  
  3. * @param type,資源的類型,其值為news或product  
  4. * @param searchKey,搜索的關鍵字  
  5. * @return Hits  
  6. */  
  7. public Hits executeSearch(String type,String keyword)   
  8. {   
  9.   Hits result = null;   
  10.   if(type != null && !type.equals("") && keyword != null && !keyword.equals(""))   
  11.   {   
  12.     try    
  13.     {   
  14.       //根據關鍵字構造一個數組   
  15.       String[] key = new String[]{keyword,type};   
  16.       //同時聲明一個與之對應的字段數組   
  17.       String[] fields = {"title","type"};   
  18.       //聲明BooleanClause.Occur[]數組,它表示多個條件之間的關系   
  19.       BooleanClause.Occur[] flags=new BooleanClause.Occur[]{BooleanClause.Occur.MUST,BooleanClause.Occur.MUST};   
  20.       ChineseAnalyzer analyzer = new ChineseAnalyzer();   
  21.       //用MultiFieldQueryParser得到query對象   
  22.       Query query = MultiFieldQueryParser.parse(key, fields, flags, analyzer);   
  23.       //c:/index表示我們的索引文件所在的目錄   
  24.       IndexSearcher searcher = new IndexSearcher("c:/index");   
  25.       //查詢結果   
  26.       result = searcher.search(query);   
  27.     } catch (Exception e)   
  28.     {   
  29.       e.printStackTrace();   
  30.     }   
  31.   }   
  32.   return result;   
  33. }  

這里需要注意的就是BooleanClause.Occur[]數組,它表示多個條件之間的關系,BooleanClause.Occur.MUST表示and,BooleanClause.Occur.MUST_NOT表示not,BooleanClause.Occur.SHOULD表示or.
安徽新華電腦學校專業職業規劃師為你提供更多幫助【在線咨詢