solr复杂查询条件查询(排序、过滤、高亮)
简单案例:
package cn.kingdee; import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.junit.Test; public class TestMyMannager {
@Test
public void queryIndex() throws Exception {
//创建连接
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
//创建一个query对象
SolrQuery solrQuery = new SolrQuery();
//设置默认的查询范围
solrQuery.set("df", "product_name");
//设置查询条件
solrQuery.setQuery("台灯");
//设置过滤条件
solrQuery.setFilterQueries("product_catalog_name:幽默杂货");
//设置排序条件
solrQuery.setSort("product_price",ORDER.desc);
//分页处理
//开始索引为0
solrQuery.setStart(0);
//每页显示多少行
solrQuery.setRows(8);
//设置高亮(开启)
solrQuery.setHighlight(true);
//设置高亮域
solrQuery.addHighlightField("product_name");
//设置高亮前缀
solrQuery.setHighlightSimplePre("<em>");
//设置高亮后缀
solrQuery.setHighlightSimplePost("</em>");
//执行语句
QueryResponse query = solrServer.query(solrQuery);
//取到查询结果集
SolrDocumentList results = query.getResults();
//共查询到商品数量
long numFound = results.getNumFound();
//遍历结果
String productname="";
for (SolrDocument doc : results) {
Map<String, Map<String, List<String>>> highlighting = query.getHighlighting();
List<String> list = highlighting.get(doc.get("id")).get("product_name");
if (list!=null&&list.size()>0) {
productname = list.get(0);
}else{
productname=(String) doc.get("product_name");
}
System.out.println(doc.get("id")); System.out.println(doc.get("product_name"));
} } }