上次介绍了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的和
}
未完待续……后续将关注一些边缘化的参数,敬请关注!