szhswl
          宋針還的個人空間
          //初始化IndexSearcher
          IndexSearcher search = new IndexSearcher(path);
          //構(gòu)建Term
          Term term = new Term(fieldName,value);
          //構(gòu)建Query對象
          Query q = new TermQuery(term);
          //檢索
          Hits hits = search.search(q);
          //顯示查詢結(jié)果
          for(int i=0; i<hits.length(); i++)
          {
           System.out.println(hits.doc(i));
          }

          IndexSearcher的常用方法有
          search(Query q);
          search(Query q,Filter filter);
          search(Query q,Sort sort);
          search(Query q,Filter filter,Sort sort);

          Hits的常用方法有
          doc(i); //得到第i個Document
          id(i);  //得到第i個Document在lucene文件中的id號
          length(); //結(jié)果集的數(shù)量
          score(i); //第i個Doucment的文檔得分,默認(rèn)顯示方式為score值越高,排得越前。score取值0-1之間
          如果想提高score的值。可以有建立索引時設(shè)置,用Field.setBoost(Float f)方法
          Field f = new Field(fieldname,value,store,tokenized);
          f.setBoost(5f);

          在lucene中,document ID 越小,查詢時所需時間越短,因?yàn)镠its的內(nèi)部緩存機(jī)制。

          Lunece的常用搜索

          一、TermQuery 詞條搜索
          Query query = new TermQuery(new Term(fieldname,value));

          二、BooleanQuery 布爾搜索
          建立二個TermQuery
          Query q1 = new TermQuery(new Term(fieldname1,value1));
          Query q2 = new TermQuery(new Term(fieldname2,value2));
          建立BooleanQuery對象
          BooleanQuery query = new BooleanQuery();
          query.add(q1,BooleanClause.Occue.MUST);
          query.add(q2,BooleanClause.Occue.MUST);
          BooleanClause.Occue 有三個靜態(tài)值
          MUST,MUST_NOT,SHOULD
          must&&must = (AnB)
          must&&must_not = (A-(AnB))
          should&&should = (AuB)

          三、RangeQuery 范圍搜索
          RangeQuery query = new RangeQuery(begin,end,false);
          begin = new Term(fieldname,value);
          end = new Term(fieldname,value);
          false 表示開區(qū)間 不包括 (begin,end) true 表示閉區(qū)間 包括 [begin,end]

          四、PrefixQuery 前綴搜索
          PrefixQuery query = new PrefixQuery(new Term(fieldname,value));

          五、PhraseQuery 短語搜索
          PhraseQuery query = new PhraseQuery();
          query.add(new Term(fieldname,value));
          query.add(new Term(fieldname,value));
          還可以設(shè)置坡度,query.setSlop(int n),默認(rèn)為0如查詢“鋼鐵”,可以用
          query.add(new Term(fieldname,”鋼”));
          query.add(new Term(fieldname,”鐵”));
          如想把“鋼和鐵”,“鋼與鐵”也查詢出來。可以加上query.setSlop(1);

          六、MultiPhraseQuery 多短語搜索
          MultiPhraseQuery query = new MultiPharseQuery();
          //加入短語的前綴
          query.add(new Term(fieldname,value));
          //加入短語的后綴
          query.add(new Term[] {new Term(fieldname,value), new Term(fieldname,value)});

          七、FuzzyQuery 模糊搜索
          FuzzyQuery query = new FuzzyQuery(new Term(filed,value));
          它的三個構(gòu)造函數(shù)
          FuzzyQuery(Term t);
          FuzzyQuery(Term t,float 0.5f); 相似度。0-1之間
          FuzzyQuery(Term t,float 0.5f,int prefixLength);前綴必須相同的長度

          本文轉(zhuǎn)自:http://job5156.xicp.net/?p=72



          ---------------------------------------------------------------------------------------------------------------------------------
          說人之短,乃護(hù)己之短。夸己之長,乃忌人之長。皆由存心不厚,識量太狹耳。能去此弊,可以進(jìn)德,可以遠(yuǎn)怨。
          http://www.aygfsteel.com/szhswl
          ------------------------------------------------------------------------------------------------------ ----------------- ---------
          posted on 2007-12-10 19:51 宋針還 閱讀(661) 評論(0)  編輯  收藏 所屬分類: 搜索引擎
          主站蜘蛛池模板: 北海市| 鄂州市| 黑山县| 云龙县| 珠海市| 增城市| 恭城| 闸北区| 新郑市| 古蔺县| 神木县| 沙雅县| 泰来县| 南靖县| 丰城市| 莲花县| 长汀县| 宝应县| 新民市| 酉阳| 兴海县| 宁远县| 沾化县| 新乡市| 万全县| 西乡县| 惠来县| 老河口市| 盘锦市| 六盘水市| 商丘市| 南京市| 策勒县| 天台县| 类乌齐县| 浦县| 长顺县| 永昌县| 剑河县| 德昌县| 松桃|