Solrj Java API调用详解系列(三)

时间:2021-07-24 16:03:03

上次介绍了SolrJ的一些查询,其实主要使用了add和addFilterQuery两个接口。以及一些不同查询需求的参数应该如何输入。本篇将介绍一些Solr提供的一些高级查询,比如group、facet等。

一、           Solr的不等于

不等于很简单,就是在查询条件前加一个“-”即可。

例如:

SolrQuery query = new SolrQuery();

Query.add(“-age:[ 30 TO 35]”);//查询年龄不在30~35岁区间的。

二、           分页查询

分页查询使用solrj中SolrQuery提供的两个接口,setStart(int)和setRows(int)

SolrQuery query = newSolrQuery();

query.setStart(0);

query.setRows(20);

//查询从第0条开始后20条数据。

三、           类SQL的group by查询

SolrJ提供的分组统计API:

SolrQuery query = new SolrQuery();

query.set(“group”,true);

query.set(“GroupParams.GROUP_FIELD”,”age”);//按照年龄进行分组。如果需要按多个可在age后加其他的field。如:query.set(“GroupParams.GROUP_FIELD”,”age”,”name”);

query.set(“GroupParams.GROUP_LIMIT”,10);//分组结果的每个分组值中包含的doc数量。

params.set("group.query", "学生", "学习", "grade:[0 TO 59.9]", "grade:[60 TO *]", "age:[10 TO 19]", "age:[20 TO *]" );  

更多参数参见:http://blog.csdn.net/wzb56_earl/article/details/7874797

四、           取某field的最大值、最小值、求和

SolrQuery query = new SolrQuery();

query.setGetFieldStatistics(“age”);

QueryResponse rsp = solrServer.query(query);

Map<String, FieldStatsInfo> stats =rsp.getFieldStatsInfo();

Iterator<Entry<String, FieldStatsInfo>> it =stats.entrySet();

While(it.hasNext()){

         Entry<String,FieldStatsInfo> entry = (Entry<String, FieldStatsInfo>) it.next();

long max = entry.getValue().getMax();//返回所有符合条件的age的最大值

long min = entry.getValue().getMin();//返回所有符合条件的age的最小值

long sum = entry.getValue().getSum();//返回所有符合条件的age的和

}

未完待续……后续将关注一些边缘化的参数,敬请关注!