【精确匹配】
1 /** 2 * 实现精确匹配 3 */ 4 public void searchByTermQuery(String path,int count,String key){ 5 IndexSearcher searcher = null; 6 7 try { 8 //创建IndexReader 9 IndexReader reader = util.getReader(getDirectory(path)); 10 11 //创建Search 12 searcher = new IndexSearcher(reader); 13 14 //4、创建Query 15 Query query = new TermQuery(new Term("author",key)); 16 17 //5、创建TocDocs 18 TopDocs td= searcher.search(query, count); 19 System.out.println("总计:" + td.totalHits + "条"); 20 21 //6、创建ScoreDoc 22 ScoreDoc[] sds = td.scoreDocs; 23 24 //7、处理文档对象 25 for(ScoreDoc sd : sds){ 26 //表示分词所在的文档对象 27 Document doc = searcher.doc(sd.doc); 28 29 //输出文档的信息 30 System.out.println(doc.get("id") + " | " + doc.get("author") + " | " + doc.get("title") + " | " + doc.get("size")); 31 } 32 } catch (IOException e) { 33 // TODO Auto-generated catch block 34 e.printStackTrace(); 35 } 36 finally{ 37 try { 38 searcher.close(); 39 } catch (IOException e) { 40 // TODO Auto-generated catch block 41 e.printStackTrace(); 42 } 43 } 44 }
精确匹配通过TermQuery进行实现。相当于Sql中的等值比较。
【范围匹配】
1 //参数(属性名,起始范围,结束范围,是否包含开始区间,是否包含结束区间) 2 //无法对数值类型数据进行匹配 3 Query query = new TermRangeQuery("title",lower,supe,true,true); 4 query(query, path,count);
范围匹配对数字无效。相当于Sql中的bewteen查询。
【数字范围匹配】
1 //对数值范围进行匹配 2 Query query = NumericRangeQuery.newIntRange("size",min,max,true,true); 3 query(query, path,count);
相当于Sql中的between。
【前缀匹配】
1 //检索有所以指定内容开头的所有数据 2 Query query = new PrefixQuery(new Term("author", prefix)); 3 query(query,path,count);
相当于Sql中的 like '值%'。
【通配符匹配】
1 //查询内容中需要使用通配符 2 Query query = new WildcardQuery(new Term("content", key)); 3 query(query,path,count);
【多条件查询】
1 BooleanQuery query = new BooleanQuery(); 2 //添加匹配条件 3 //MUST :必须存在的,相当于&&(并且) 4 //SHOULD :非必须存在的,相当于||(或者) 5 //MUST_NOT:一定不存在,相当于!(非) 6 query.add(new TermQuery(new Term("author",author)),Occur.SHOULD); 7 query.add(new TermQuery(new Term("content",content)),Occur.MUST_NOT); 8 //执行查询 9 query(query,path,count);
【短语查询】
1 PhraseQuery query = new PhraseQuery(); 2 //设置条数 3 query.setSlop(slop); 4 //设置短语的开始关键字 5 query.add(new Term("content",start)); 6 //设置短语的结束关键字 7 query.add(new Term("content",end)); 8 9 query(query,path,count);
【模糊查询】
1 Query query = new FuzzyQuery(new Term("content", key)); 2 3 query(query, path,count);