asdtiang的博客 感謝blogjava提供的博客交流平臺

          lucene2.4 學習筆記1

          Posted on 2010-01-12 18:10 asdtiang 閱讀(1447) 評論(0)  編輯  收藏 所屬分類: 搜索引擎學習
          網站要用搜索功能,本來想用SQL語句來實現,后來感覺沒什么意思,并開始考慮用LUCENE,去官網下載了2.9的版本,發現新東西比較多,于時下載了 2.4版本.相比以前的版本有些變化。
          首先建立Index:類文件如下:

          import jeasy.analysis.MMAnalyzer;

          import org.apache.lucene.analysis.Analyzer;
          import org.apache.lucene.analysis.standard.StandardAnalyzer;
          import org.apache.lucene.document.Document;
          import org.apache.lucene.document.Field;
          import org.apache.lucene.index.CorruptIndexException;
          import org.apache.lucene.index.IndexWriter;
          import org.apache.lucene.store.LockObtainFailedException;

          import com.lmsCard.www.bean.company.Company;
          import com.lmsCard.www.tools.Init;
          public class LuceneIndex {

          private String INDEX_STORE_PATH;
          private Analyzer analyzer;

          public LuceneIndex(){
          Init init
          =Init.getInit();
          init.readInfo();
          INDEX_STORE_PATH
          =init.LUCENE_INDEX;
          System.out.println(INDEX_STORE_PATH);
          analyzer 
          = new StandardAnalyzer();
          }
          /////company 為一個bean
          public void createCompanyIndex(Company company, boolean b) {
          try {
          IndexWriter writer 
          = new IndexWriter(INDEX_STORE_PATH + "/company",
          analyzer, b, IndexWriter.MaxFieldLength.UNLIMITED);
          System.out.println(INDEX_STORE_PATH
          +"/company");
          Document doc 
          = new Document();
          // //商家名稱
          doc.add(new Field("companyName", company.getCompanyName(),
          Field.Store.NO, Field.Index.ANALYZED));
          // /商家簡介
          if (company.getInfo() == null) {
          doc.add(
          new Field("info",
          company.getInfo() 
          + "www.lmscard.com", Field.Store.NO,
          Field.Index.ANALYZED));
          else {
          doc.add(
          new Field("info", company.getInfo(), Field.Store.NO,
          Field.Index.ANALYZED));
          }
          // /折扣
          doc.add(new Field("discount", company.getZhekou() + "",
          Field.Store.YES, Field.Index.NOT_ANALYZED));
          // //備注
          if(company.getBeizhu()==null||company.getBeizhu().equals("")){
          doc.add(
          new Field("comment", company.getBeizhu()
          + "www.lmscard.com", Field.Store.NO, Field.Index.ANALYZED));
          }
          doc.add(
          new Field("comment", company.getBeizhu()+"www.lmscard.com"
          , Field.Store.YES, Field.Index.ANALYZED));

          // ///商家編號
          doc.add(new Field("companyId", company.getCompanyId(),
          Field.Store.YES, Field.Index.NOT_ANALYZED));
          // /商家地址
          if(company.getCompanyAddress()==null)
          {
          doc.add(
          new Field("address", company.getCompanyAddress()+"www.lmscard.com",
          Field.Store.NO, Field.Index.ANALYZED));
          }
          else{
          doc.add(
          new Field("address", company.getCompanyAddress(),
          Field.Store.YES, Field.Index.ANALYZED));
          }

          System.out.println(company.getCompanyId());
          writer.addDocument(doc);
          writer.close();

          catch (CorruptIndexException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          catch (LockObtainFailedException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          catch (IOException e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
          }
          }

          }

          ////建立一個搜索類:
          import java.util.ArrayList;
          import java.util.List;

          import org.apache.lucene.analysis.Analyzer;
          import org.apache.lucene.analysis.standard.StandardAnalyzer;
          import org.apache.lucene.document.Document;
          import org.apache.lucene.queryParser.MultiFieldQueryParser;
          import org.apache.lucene.search.BooleanClause;
          import org.apache.lucene.search.IndexSearcher;
          import org.apache.lucene.search.Query;
          import org.apache.lucene.search.ScoreDoc;
          import org.apache.lucene.search.Searcher;
          import org.apache.lucene.search.Sort;

          import com.lmsCard.www.tools.Init;

          public class LuceneSearch {
          private Analyzer analyzer;
          private String type;
          private String INDEX_STORE_PATH;

          public LuceneSearch() {

          Init init 
          = Init.getInit();
          init.readInfo();
          INDEX_STORE_PATH 
          = init.LUCENE_INDEX;
          System.out.println(INDEX_STORE_PATH);
          analyzer 
          = new StandardAnalyzer();
          }

          public List searchCompany(String keyWord, String type1) {
          List l 
          = new ArrayList();
          if (type1 == null) {
          this.type = "companyName";
          }
          try {

          BooleanClause.Occur[] clauses 
          = { BooleanClause.Occur.SHOULD,
          BooleanClause.Occur.SHOULD, BooleanClause.Occur.SHOULD,
          BooleanClause.Occur.SHOULD };
          Searcher searcher 
          = new IndexSearcher(INDEX_STORE_PATH + "/company");
          System.out.println(INDEX_STORE_PATH 
          + "  ffff  " + type
          + " keyWord:" + keyWord);
          Query query 
          = MultiFieldQueryParser.parse(keyWord, new String[] {
          "companyName""info""comment""address" }, clauses,
          analyzer);
          // 此處在2.0基礎上有改動,此處必須傳入一個返回條數,這里用searcher.maxDoc()表示返回所有條數。
          Sort sort=new Sort("backMoney",true);
          ScoreDoc[] docs 
          = searcher.search(query, searcher.maxDoc()).scoreDocs;
          System.out.println(docs.length 
          + "docs.length");
          Document doc;
          for (int i = 0; i < docs.length; i++) {
          doc 
          = searcher.doc(docs[i].doc);
          l.add(doc.get(
          "companyId"));
          System.out.println(doc.get(
          "companyId"));

          }
          catch (Exception e) {
          e.printStackTrace();
          }
          return l;
          }

          }



          天蒼蒼,野茫茫,風吹草底見牛羊

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          posts - 80, comments - 24, trackbacks - 0, articles - 32

          Copyright © asdtiang

          asdtiang的博客 PaidMailz
          點擊廣告網賺A(每天4個廣告,每個0.0025美元,一個搜索廣告0.03美元)
          主站蜘蛛池模板: 濉溪县| 万州区| 深州市| 西吉县| 肥城市| 德庆县| 安宁市| 健康| 弥渡县| 大理市| 黎平县| 鲁甸县| 无棣县| 平凉市| 阿勒泰市| 桐柏县| 濉溪县| 双牌县| 阿拉善左旗| 山阴县| 吉水县| 绥德县| 丰台区| 瑞安市| 河池市| 巧家县| 陇川县| 通河县| 南阳市| 正阳县| 什邡市| 黑水县| 青海省| 堆龙德庆县| 丰台区| 尼玛县| 资源县| 西乌珠穆沁旗| 怀远县| 磴口县| 黔东|