查询

【精确匹配】

 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);

 

 

 

posted @ 2018-10-22 18:35  猩生柯北  阅读(157)  评论(0编辑  收藏  举报