/** *** 一个关键字,对一个字段进行查询 **** */
    
    QueryParser qp = new QueryParser("content",analyzer);
    
    query = qp.parse(keyword);
    
    Hits hits = searcher.search(query);
  
    /** *** 模糊查询 **** */
    
    Term term = new Term("content",keyword);
    
    FuzzyQuery fq = new FuzzyQuery(term);
    
    Hits hits = searcher.search(fq);
  
    /** *** 一个关键字,在两个字段中查询 **** */
    
    /*
    
    * 1.BooleanClause.Occur[]的三种类型: MUST : + and MUST_NOT : - not SHOULD : or
    
    * 2.下面查询的意思是:content中必须包含该关键字,而title有没有都无所谓
    
    * 3.下面的这个查询中,Occur[]的长度必须和Fields[]的长度一致。每个限制条件对应一个字段
    
    */
    
    BooleanClause.Occur[] flags = new BooleanClause.Occur[]{BooleanClause.Occur.SHOULD,BooleanClause.Occur.MUST};
    
    query=MultiFieldQueryParser.parse(keyword,new String[]{"title","content"},flags,analyzer);
  
    
    /** *** 两个(多个)关键字对两个(多个)字段进行查询,默认匹配规则 **** */
    
    /*
    
    * 1.关键字的个数必须和字段的个数相等 
    
    * 2.由于没有指定匹配规定,默认为"SHOULD" 因此,下面查询的意思是:"title"中含有keyword1 或 "content"含有keyword2. 
    
    * 在此例中,把keyword1和keyword2相同
    
    */
    
    query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new
    
    String[]{"title","content"},analyzer);
  
    
    /** *** 两个(多个)关键字对两个(多个)字段进行查询,手工指定匹配规则 **** */
    
    /*
    
    * 1.必须 关键字的个数 == 字段名的个数 == 匹配规则的个数
    
    * 2.下面查询的意思是:"title"必须不含有keyword1,并且"content"中必须含有keyword2
    
    */
    
    BooleanClause.Occur[] flags = new
    
    BooleanClause.Occur[]{BooleanClause.Occur.MUST_NOT,BooleanClause.Occur.MUST};
    
    query=MultiFieldQueryParser.parse(new String[]{keyword,keyword},new
    
    String[]{"title","content"},flags,analyzer);
  
    
    /** *** 对日期型字段进行查询 **** */
  
    /** *** 对数字范围进行查询 **** */
    
    /*
    
    * 1.两个条件必须是同一个字段 
    
    * 2.前面一个条件必须比后面一个条件小,否则找不到数据
    
    * 3.new RangeQuery中的第三个参数,表示是否包含"=" true: >= 或 <= false: > 或 < 
    
    * 4.找出 55>=id>=53 or 60>=id>=57:
    
    */
    
    Term lowerTerm1 = new Term("id","53");
    
    Term upperTerm1 = new Term("id","55");
    
    RangeQuery rq1 = new RangeQuery(lowerTerm1,upperTerm1,true);
  
    Term lowerTerm2 = new Term("id","57");
    
    Term upperTerm2 = new Term("id","60");
    
    RangeQuery rq2 = new RangeQuery(lowerTerm2,upperTerm2,true);
  
    BooleanQuery bq = new BooleanQuery();
    
    bq.add(rq1,BooleanClause.Occur.SHOULD);
    
    bq.add(rq2,BooleanClause.Occur.SHOULD);
    
    Hits hits = searcher.search(bq);
    
    
    
    
      
        
          二:结果排序
        
      
    
  
排序的关键点有两个:
1:首先你要排序的字段必须是被index的,并且是untokenized的。
如:
2:在检索时候:
    如:
    
    
    /***** 排序 *****/
    
    /*
    
     * 1.被排序的字段必须被索引过(Indexecd),在索引时不能 用 Field.Index.TOKENIZED
    
     * (用UN_TOKENIZED可以正常实现.用NO时查询正常,但排序不能正常设置升降序)
    
     * 2.SortField类型
    
     * SCORE、DOC、AUTO、STRING、INT、FLOAT、CUSTOM此类型主要是根据字段的类型选择
    
     * 3.SortField的第三个参数代表是否是降序true:降序 false:升序
    
     */
    
     Sort sort = new Sort(new SortField[]{new SortField("click", SortField.INT, true)});
    
     Hits hits = searcher.search(querystring,sort);
    
    
     /*
    
     * 按日期排序
    
     */
    
     Sort sort = new Sort(new SortField[]{new SortField("createTime", SortField.INT, false)});
    
    
    
     /***** 过滤器 ******/
    
    QueryParser qp1 = new QueryParser("content",analyzer);
    
    Query fquery = qp1.parse("我");
    
    
    BooleanQuery bqf = new BooleanQuery();
    
    bqf.add(fquery,BooleanClause.Occur.SHOULD);
    
    
     QueryFilter qf = new QueryFilter(bqf);
    
    
     Hits hits = searcher.search(query);
  

