一、安装solr
https://lucene.apache.org/solr/
下载之后解压,cmd访问bin路径 输入 solr start启动solr服务,访问:http://127.0.0.1:8983。
创建core
创建core前,要事先再solr目录下创建一个core的文件夹,定义为自己想要的命名,定义路径:solr\server\solr
将solr\server\solr\configsets\basic_configs下的内容复制到已创建的目录下,修改managed-schema,增加想存入solr库中的字段
创建完以上文件及文件夹之后就可以在solr后台创建core了,core的名称与你创建的文件夹名称要一致。
二、java项目集成
pom依赖
<dependency> <groupId>org.apache.solr</groupId> <artifactId>solr-solrj</artifactId> <version>6.6.0</version> </dependency>
创建solr管理类
public class SolrManager { private String solorUrl; public SolrManager(){ this.solorUrl = Global.getConfig("solr.url"); } public SolrManager(String solorUrl){ this.solorUrl = solorUrl; } public String getSolorUrl() { return solorUrl; } public void setSolorUrl(String solorUrl) { this.solorUrl = solorUrl; } /** * 根据id删除文档 从索引库删除文档 */ public void deleteDocument(List<String> idList) throws Exception { SolrClient solrClient = new HttpSolrClient.Builder(solorUrl).build(); // 删除文档 solrClient.deleteById(idList); // 提交修改 solrClient.commit(); release(solrClient); } public void deleteDocById(String id) { SolrClient solrClient = new HttpSolrClient.Builder(solorUrl).build(); if(solrClient != null){ try { UpdateResponse response = solrClient.deleteById(id); solrClient.commit(); } catch (Exception e) { e.printStackTrace(); } } release(solrClient); } public void release(SolrClient solrClient){ try { solrClient.close(); } catch (IOException e) { e.printStackTrace(); } } }
添加
public class SolrDocumentAdder extends SolrManager { private SolrClient solrClient; public void add(List<Map> rows) throws SolrServerException, IOException { if(rows == null || rows.size() == 0) return; ArrayList<SolrInputDocument> docList = new ArrayList<SolrInputDocument>(); for(Map row :rows){ Set<Entry> set = row.entrySet(); SolrInputDocument document = new SolrInputDocument(); for(Entry e : set){ if(e.getValue() != null){ document.addField((String) e.getKey(), e.getValue()); } } docList.add(document); } solrClient = getSolrClient(); if(solrClient != null){ UpdateResponse response = solrClient.add(docList); solrClient.commit(); } } protected SolrClient getSolrClient(){ if(solrClient == null) solrClient = new HttpSolrClient.Builder(this.getSolorUrl()).build(); return solrClient; } public void release(){ if(solrClient != null){ release(solrClient); solrClient=null; } } }
查询
public class SolrDocumentQueryer extends SolrManager { static final String QUERY_FIELD_PART = "tmpl_data_field"; public SolrDocumentQueryer(){ super(); } public SolrDocumentQueryer(String solrUrl){ super(solrUrl); } /** * 对索引库中的文档进行更新 * * @throws SolrServerException */ public QueryResponse query(String inputWord, int start, int size) { SolrClient solrClient = new HttpSolrClient.Builder(this.getSolorUrl()).build(); SolrQuery query = new SolrQuery(); // 给query设置一个主查询条件 // query.set("q", "*:*");//查询所有 query.set("q", inputWord); // 给query增加过滤查询条件 // query.addFilterQuery("product_price:[0 TO 200]"); // 给query增加布尔过滤条件 // query.addFilterQuery("-product_name:台灯"); // 给query设置默认搜索域 query.set("df", QUERY_FIELD_PART); // 设置分页参数 query.setStart(start); query.setRows(size);// 每一页多少值 QueryResponse response = null; try { response = solrClient.query(query); } catch (Exception e) { e.printStackTrace(); }finally{ release(solrClient); } return response; } public QueryResponse query(String inputWord, List<String> queryFilters, int start, int size, Map<String, String> rawQueryParameters) { SolrClient solrClient = new HttpSolrClient.Builder(this.getSolorUrl()).build(); SolrQuery query = new SolrQuery(); // 给query设置一个主查询条件 query.set("q", inputWord); // 给query增加过滤查询条件 if(queryFilters != null && queryFilters.size()>0){ for(String qf: queryFilters){ query.addFilterQuery(qf); } } query.set("df", QUERY_FIELD_PART); query.setStart(start*size); query.setRows(size); if(rawQueryParameters != null && rawQueryParameters.size() > 0){ Set<String> rqps = rawQueryParameters.keySet(); for(String k : rqps){ query.set(k, rawQueryParameters.get(k)); } } QueryResponse response = null; try { response = solrClient.query(query); } catch (Exception e) { e.printStackTrace(); }finally{ release(solrClient); } return response; } }