在Java中使用solr 版本7.2.0
solrj已经更新到了7.2.0,新版本solr获取SolrClient的方式也和之前旧版本有所不同
solr6.5开始不推荐直接使用HttpSolrClient的构造方法创建SolrClient(6.5之前版本的创建方式在页末)
从7.0.0开始删除了HttpSolrClient创建客户端的构造方法,使用内部类Builder构建SolrClient
安装solr:
import org.apache.solr.client.solrj.SolrServerException;import org.apache.solr.client.solrj.impl.HttpSolrClient;import org.apache.solr.client.solrj.response.QueryResponse;import org.apache.solr.client.solrj.response.UpdateResponse;import org.apache.solr.common.SolrDocument;import org.apache.solr.common.SolrDocumentList;import org.apache.solr.common.SolrInputDocument;import org.apache.solr.common.params.MapSolrParams;import org.apache.solr.common.params.SolrParams;import org.junit.Test;import java.io.IOException;import java.util.HashMap;import java.util.Map;/** * Java中使用solr * @author jaffreyen * @date 2018/1/9 */public class SolrConnect { // solr url private final static String BASE_URL = "http://localhost:8081/solr"; /** * 获取SolrClient * solrj 6.5及以后版本获取方式 * @return */ public static HttpSolrClient getSolrClient(){ /* * 设置超时时间 * .withConnectionTimeout(10000) * .withSocketTimeout(60000) */ return new HttpSolrClient.Builder(BASE_URL) .withConnectionTimeout(10000) .withSocketTimeout(60000) .build(); } @Test public void testQuery() throws IOException, SolrServerException { HttpSolrClient solrClient = getSolrClient(); // 定义查询条件 Mapparams = new HashMap (); params.put("q", "*:*"); SolrParams mapSolrParams = new MapSolrParams(params); //执行查询 第一个参数是collection,就是我们在solr中创建的core QueryResponse response = solrClient.query("RoleVO", mapSolrParams); // 获取结果集 SolrDocumentList results = response.getResults(); for (SolrDocument result : results) { // SolrDocument 数据结构为Map System.out.println(result); } } @Test public void testAdd() throws IOException, SolrServerException { HttpSolrClient solrClient = getSolrClient(); // 定义数据 solr输入文档 数据结构为Map SolrInputDocument inputDocument = new SolrInputDocument(); inputDocument.addField("id","123"); inputDocument.addField("roleName", "角色名称"); // 执行添加 ps:如果id相同,则执行更新操作 // 要指定操作的collection 就是solr-home下定义的core UpdateResponse add = solrClient.add("RoleVO", inputDocument); //提交添加/更新 solrClient.commit("RoleVO"); } @Test public void testDelete() throws IOException, SolrServerException { HttpSolrClient solrClient = getSolrClient(); // 通过id删除 执行要删除的collection(core) solrClient.deleteById("RoleVO", "123"); // 还可以通过查询条件删除 // solrClient.deleteByQuery("RoleVO", "查询条件"); // 提交删除 solrClient.commit("RoleVO"); }}
solrj6.5之前的初始化SolrClient方式
直接使用HttpSolrClient的构造方法初始化
/** * 获取SolrClient * solrj 6.5以前的获取方式 * @return */ public static HttpSolrClient getSolrClient(){ return new HttpSolrClient(BASE_URL); }
这只是最基本的使用,接下来我会封装一个solr查询工具类,可以非常方便的使用solr
solr的查询语法随后也会发出来