Lucene1.搜索部分

1.搜索部分
~1.精确搜索
  Query query=new TermQuery(new Term("id","1"));
~2.范围搜索
  //字符串类型范围 true表示是否包括边界值
  Query query=new TermRangeQuery("id", "1", "4", true, true); 
  //数字类型
  //query=NumericRangeQuery.newIntRange("age", 20, 21, true, true);
  //日期类型
  SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-mm-dd");
  query=NumericRangeQuery.newLongRange("date", dateFormat.parse("2010-09-22").getTime(), dateFormat.parse("2012-09-22").getTime(), true, true);
  
~3.前缀搜索
  //前缀搜索 以一个单词前缀为基础
  query=new PrefixQuery(new Term("name", "s"));
~4.通配符搜索
  //通配符搜索 *表示任意多个 ?表示一个
  query=new WildcardQuery(new Term("name","s??"));
~5.多条件搜索
  //多条件搜索 Occur.MUST必须出现    Occur.SHOULD可以出现    Occur.MUST_NOT必须不出现
  query1=new BooleanQuery();
  query1.add(new TermQuery(new Term("name","limao5")), Occur.SHOULD);
  query1.add(new TermQuery(new Term("id","5")), Occur.MUST_NOT);
===========================================
~6.QueryParse查询 
 //QueryParse查询  数字区域不能实现
  //设置默认操作符
  //parser.setDefaultOperator(Operator.AND);
  //搜索I LIKE的内容 默认为Or的关系
  query =parser.parse("I LIKE");
  //搜索I LIKE 两个都存在的
  query =parser.parse("I AND LIKE");
  //搜索name中的limao1@my(出现两个)  name:limao1(出现一个) name:limao(没有)
  query =parser.parse("name:limao1");
  //用通配符来操作
  query =parser.parse("name:l*");
  //通配符在首位的情况 默认是不可以的 需要改变默认设置
  //设置默认首位通配符
  parser.setAllowLeadingWildcard(true);
  query =parser.parse("name:*my");
  //搜索多条件查询name中要有@my  content中不能有sYP1
  query =parser.parse("+ name:@my  - sYP1");
  //匹配一个区间的信息[]表示开区间  {}表示闭区间
  query =parser.parse("id:[1 TO 4]");
  query =parser.parse("id:{1 TO 4}");
  //完全匹配一句短语
  query =parser.parse("\"I LIKE sYP1\"");
  //匹配I sYP1中间有一个空格的
  query =parser.parse("\"I sYP1\"~1");
  //模糊查询
  query =parser.parse("name:limao~");
===========================================
~7.分页查询
---1.再查询的方式   这种方式一定得注意数组越界
  Directory directory=util.getDirectory();
  IndexReader indexReader=util.IndexReaderUtil(directory);
  IndexSearcher indexSearcher=new IndexSearcher(indexReader);
  QueryParser parser=new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));
  Query query=parser.parse("Java");
  TopDocs topDocs=indexSearcher.search(query, 100);
  ScoreDoc[] docs=topDocs.scoreDocs;
  System.out.println("总数:"+topDocs.totalHits);
  //一次先把所有的查出来
  int start=5;
  int end=10;
  for (int i = start; i < end; i++) {
   //7.根据searcher和ScoreDoc对象获取具体Document对象
   Document d=indexSearcher.doc(docs[i].doc);
   //8.根据document对象获取需要的值
   System.out.println(d.get("filename")+"["+d.get("path")+"]");
  }

---2.searcherAfter分页操作方式
   Directory directory=util.getDirectory();
   IndexReader indexReader=util.IndexReaderUtil(directory); 
   IndexSearcher indexSearcher=new IndexSearcher(indexReader);
   QueryParser parser=new QueryParser(Version.LUCENE_35,"content",new StandardAnalyzer(Version.LUCENE_35));
   Query query=parser.parse("Java");
   int pagestart=1;
   int pageSize=5;
   //表示上一页的最后一条
   int last=(pagestart-1)*pageSize-1;
   //这里的查询数量也应该依次增加,不该一次查完
   int score=pagestart*pageSize;
            TopDocs topDocs=indexSearcher.search(query, score);
   ScoreDoc[] docs=topDocs.scoreDocs;
   if(last==-1){
     topDocs=indexSearcher.searchAfter(null, query,5);
   }else{
     topDocs=indexSearcher.searchAfter(docs[last], query,5);
   }
   //docs[4]表示上一页的最后一条  null表示第一页
   docs= topDocs.scoreDocs;
   System.out.println("总数:"+topDocs.totalHits+"docs:"+docs.length);
   for (int i = 0; i < docs.length; i++) {
    //7.根据searcher和ScoreDoc对象获取具体Document对象
    Document d=indexSearcher.doc(docs[i].doc);
    //8.根据document对象获取需要的值
    System.out.println(d.get("filename")+"["+d.get("path")+"]");
   }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值