lucene学习五:各种查询条件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pangliang_csdn/article/details/51752665

在前面4章基础上,本文介绍几种查询条件

public static void testQuery(Query query) throws Exception{
            IndexSearcher indexSearcher=LuceneUtils.getIndexSearcher();
            TopDocs topDocs=indexSearcher.search(query,100);
            for(ScoreDoc scoreDoc:topDocs.scoreDocs){
                Document document=indexSearcher.doc(scoreDoc.doc);
                System.out.println(document.get("id"));
                System.out.println(document.get("title"));
                System.out.println(document.get("content"));
                System.out.println(document.get("author"));
                System.out.println(document.get("link"));
            }
   }

1:一种查询,TermQuery
Query query=new TermQuery(new Term("author","毕加索"));//前面是查询的域名,后面是条件,另外注意这种查询条件,对于stringfiled来说要全名才能查询,比如作者,必须输入毕加索才能查到,你随便一个毕,是查不到的

Query query=new TermQuery(new Term("title","画"));//对于textfield来说这是采用单字分词,任意一个单词都能搜到

Query query=new TermQuery(new Term("title","我的画天下第一"));//这样搜不到

2:/第二种查询:字符串搜索..
 String fields []={"author"};
 QueryParser queryParser=new MultiFieldQueryParser(LuceneUtil.getMatchVersion(),fields,LuceneUtil.getAnalyzer());
 Query query=queryParser.parse("毕加索");

对于stringfiled不管是输入全文还是单个字符都是搜不到,比如毕加索或毕

 String fields []={"title","content"};
 QueryParser queryParser=new MultiFieldQueryParser(LuceneUtil.getMatchVersion(),fields,LuceneUtil.getAnalyzer());
 Query query=queryParser.parse("画");或者Query query=queryParser.parse("我");或Query query=queryParser.parse("我的画天下第一");都能搜到结果

3:第三种查询:查询所有

  Query query=new MatchAllDocsQuery();

4:第四种查询:范围查询,也可以称过滤器

 Query query=NumericRangeQuery.newIntRange("id", 1, 10, true, true);

//第一个参数是你根据那个字段查,第二三是1到10之间,后面两个布尔值是代表是否等于的意思,上面的查询条件就是查询id>=1&&id<=10的索引

5:第五种查询:通配符

Query query=new WildcardQuery(new Term("author", "毕*"));//?代表单个任意字符,* 代表多个任意字符

6:第六种查询:模糊查询

1:需要根据查询的条件
 2:最大可编辑数  取值范围0,1 ,2
 允许我的查询条件的值,可以错误几个字符...

Query query=new FuzzyQuery(new Term("author", "毕加"),1);//代表后面可以缺少或错误一个字符

7:查询结果排序

String fields []={"title"};

QueryParser queryParser=new MultiFieldQueryParser(LuceneUtil.getMatchVersion(),fields,LuceneUtil.getAnalyzer());
 //不同的规则构造不同的子类..
 //title:keywords  ,content:keywords
 Query query=queryParser.parse("我的画");
 Sort sort=new Sort();
//升序
 //SortField sortField=new SortField("id", Type.INT);
//降序                
SortField sortField=new SortField("id", Type.INT,true);
 //设置排序的字段...
 sort.setSort(sortField);
TopDocs topDocs=indexSearcher.search(query,100,sort);

关于lucene的查询告于段落



没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试