solrJ入门学习
»其他SolrJ是用来访问Solr服务的java客户端,即可以通过SolrJ提供的接口来访问Solr服务。
目录
导包
- 导入solrj的jar包,存放在solr-4.10.3\dist\solrj-lib下的所有包 + solr-4.10.3\dist目录下的solr-solrj-4.10.3.jar
- 导入solr的jar包,存放在solr-4.10.3\example\lib\ext目录下
操作
- 通过SolrServer对象即可连接solr服务,进行增删改索引
- 通过SolrQuery对象进行查询索引库
案例
本案例通过模拟京东商城查询操作来演示solrj查询索引库,点击查看完整代码
package cn.ruanwenjun.jd.dao;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import org.apache.solr.client.solrj.SolrQuery;
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.springframework.stereotype.Controller;
import cn.ruanwenjun.jd.domain.Product;
import cn.ruanwenjun.jd.domain.QueryVo;
/**
* @author ruanwenjun
* E-mail:861923274@qq.com
* @date 2018年4月15日 上午10:59:14
*/
@Controller
public class ProductDao {
//根据条件查询
public List<Product> queryByQueryVo(QueryVo vo) throws SolrServerException {
SolrServer solrServer = new HttpSolrServer("http://localhost:8080/solr");
SolrQuery query = new SolrQuery();
//查询关键字
if(vo.getQueryString() !=null && !vo.getQueryString().trim().equals("")) {
query.set("q", "product_keywords:"+vo.getQueryString().trim());
}
//设置查询大小
query.setStart(0);
query.setRows(16);
//设置查询域
query.set("fl", "id,product_price,product_name,product_picture");
//设置查询条件
if(vo.getCatalog_name() != null && !vo.getCatalog_name().equals("")) {
query.set("fq", "product_catalog_name:"+vo.getCatalog_name());
}
if(vo.getPrice() != null && !vo.getPrice().equals("")) {
String product_price = vo.getPrice();
String[] split = product_price.split("-");
query.set("fq", "product_price:[" + split[0] + " TO " + split[1] + "]");
}
//为1则表示降序
if(!vo.getSort().equals("1")) {
query.set("sort", "product_price asc"); //升序
}else {
query.set("sort", "product_price desc"); //降序
}
//开启高亮查询
query.setHighlight(true);
query.set("hl.fl", "product_name");
query.setHighlightSimplePre("<span style='color:red '>");
query.setHighlightSimplePost("</span>");
QueryResponse response = solrServer.query(query);
SolrDocumentList solrDocumentList = response.getResults();
//高亮查询结果
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<Product> productList = new ArrayList<Product>();
//查询总数
long numFound = solrDocumentList.getNumFound();
for (SolrDocument solrDocument : solrDocumentList) {
String id = (String) solrDocument.getFieldValue("id");
Float price = (Float) solrDocument.getFieldValue("product_price");
String picture = (String) solrDocument.getFieldValue("product_picture");
String name = (String) solrDocument.getFieldValue("product_name");
//获得高亮的名字
Map<String, List<String>> map = highlighting.get(id);
List<String> list = map.get("product_name");
if(list != null) {
name = list.get(0);
}
Product product = new Product(id,price,name,picture);
productList.add(product);
}
return productList;
}
}