目的是提供solrj 实现 查询的样例参考
1. 单维度排序
//查询条件
query.setQuery(queryString);
// add 是添加
query.addSortField(field_price, ORDER.asc);
//set是覆盖,也就是后面的覆盖前面的。
query.setSortField(field_price,ORDER.desc);
//如果需要第一维度值相等,按第二维度继续排序的话,继续add
query.addSortField(field_fans_count, ORDER.asc);
一般两个维度就可以了,也有定义第三个维度,就过去经验看,第三维度基本没起到区分效果。第一、二维度比较关键。
2. 文本排序
// 查询条件没有设定排序的,默认就是文本排序。文本的因子可以动态调整或者plugin的
query.setQuery("user_nick:淘宝女装");
3. 离线得分排序
// 查询条件
query.setQuery("user_nick:淘宝女装");
//离线生成域field_service_value,里面保持复杂得分模型运算后的分值
query.addSortField(field_service_value,ORDER.desc);
4. boost查询排序
// 查询条件表示命中nick的权重是2,而命中descr的权重是0.5,最终是二者求和
query.set("defType","lucene");
query.setQuery("(user_nick:淘宝女装)^2 OR (user_descr:淘宝女装)^0.5");
//查询条件,表示命中nick的权重2,命中descr权重0.5,最终那个大取那个
query.set("defType","dismax");
query.setQuery("淘宝女装");
query.add("qf","user_nick^2,user_descr^0.5");
5. function查询排序
//按照指定函数排序
query.set("q","user_nick:淘宝女装");
query.set("sort","sum(fans_count,1) desc");
6. 文本和函数混合排序
//文本排序得分乘以权重2
query.set("defType","dismax");
query.setQuery("淘宝女装");
query.add("qf","user_nick^2")
//文本得分排序乘以函数值
query.set("defType","dismax");
query.setQuery("淘宝女装");
query.add("bf","div(fans_count,1)");//相除
//文本得分排序乘以函数值
query.set("defType","lucene");
query.setQuery("user_nick:淘宝女装AND _val_:fans_count");
//文本得分排序乘以函数值
query.set("defType","lucene");
query.setQuery("user_nick:淘宝女装AND _val_:fans_count^2");
//文本得分排序乘以函数值
query.set("defType","lucene");
query.setQuery("(user_nick:淘宝女装)^0.5 AND _val_:fans_count^2");
//文本得分排序乘以函数值
query.set("defType","lucene");
query.setQuery("(user_nick:淘宝女装)^0.5 AND _val_:1.5");
//文本得分排序与函数值指定组合
query.set("defType","func");
query.add("qq","{!dismax qf=user_nick}淘宝女装");
query.add("q","product(fans_count, query($qq,0.1))") ;
7. 个性化排序
//这里搜索user_nick:淘宝女装的时候,文本得分可以是调整过的或者默认的
query.setQuery("(user_nick:淘宝女装)^8 OR (user_descrip:淘宝女装)^2");
query.setQuery("((user_nick:淘宝女装) AND _val_:fans_count) OR (user_descrip:淘宝女装)^2");
其他,函数查询的发挥。文本域函数结合查询的发挥了。
参考链接
http://wiki.apache.org/solr/DisMaxQParserPlugin