为什么80%的码农都做不了架构师?>>>
solrj是solr java应用api,能够快速搭建高效、简单的solr客户端(solr文档内容)。
正如文档里说的,solrj的搭建可以说是非常的方便,api也非常简单易懂,下面以maven项目搭建solr客户端为例:
打开pom.xml添加solrj依赖
下面就可以编写solr客户端代码了,主要对象是SolrClient,SolrClient对象包含了增、删、查等api,SolrClient的初始化方法如下
/** solr 服务地址 */
private static String SOLR_URL = "http://{SolrHost}:{Port}/solr/{CoreName}";static {solrClient = new HttpSolrClient.Builder(SOLR_URL).build();
}
添加文档,solr添加索引的api常用的分为两种,一种是调用add方法传入SolrInputDocument对象,SolrInputDocument对象负责描述文档内容,代码如下
/*** 添加索引* @param ds* @throws IOException* @throws SolrServerException*/public static void addDocument(DataSourcePO ds) throws IOException, SolrServerException {SolrInputDocument document = new SolrInputDocument();document.addField("title", ds.getTitle());document.addField("content", ds.getContent());solrClient.add(document);solrClient.commit();}
solr支持antation形式添加文档,通过注解@Field指定java属性对应的solr字段,调用SolrClient的addBean方法添加
package atyy.model;import org.apache.solr.client.solrj.beans.Field;import java.util.*;/*** 源数据表* Create by Automatically generated
*/
public class DataSourcePO {/** id */@Field("id")private String id;/** 任务id */@Field("taskId")private String idTask;/** 标题 */@Field("title")private String title;/** 内容 */@Field("content")private String content;/** 抓取链接 */private String url;/** 创建时间 */@Field("create_time")private Date createTime;public DataSourcePO(){}/*** 源数据表 getter*/public String getId() {return id;}/*** 源数据表 setter*/public void setId(String id) {this.id = id;}/*** 源数据表 getter*/public String getIdTask() {return idTask;}/*** 源数据表 setter*/public void setIdTask(String idTask) {this.idTask = idTask;}/*** 源数据表 getter*/public String getTitle() {return title;}/*** 源数据表 setter*/public void setTitle(String title) {this.title = title;}/*** 源数据表 getter*/public String getContent() {return content;}/*** 源数据表 setter*/public void setContent(String content) {this.content = content;}/*** 源数据表 getter*/public String getUrl() {return url;}/*** 源数据表 setter*/public void setUrl(String url) {this.url = url;}/*** 源数据表 getter*/public Date getCreateTime() {return createTime;}/*** 源数据表 setter*/public void setCreateTime(Date createTime) {this.createTime = createTime;}
}
/*** 添加索引* @param ds* @throws IOException* @throws SolrServerException*/public static void addDocument(DataSourcePO ds) throws IOException, SolrServerException {solrClient.addBean(ds);solrClient.commit();}
solr删除文档通常是通过文档主键来删除,主键是Schema中配置的uniqueKey标签指定,默认情况是id
/*** 删除索引* @param id* @throws IOException* @throws SolrServerException*/public static void deleteDocument(String id) throws IOException, SolrServerException {solrClient.deleteById(id);}
Solrj查询通过SolrQuery对象来设置查询参数,从4.0版本以后可以选择RequestHandler,RequestHandler可以理解为查询配置,可以配置高亮和查询权重算法,当然,高亮也可以用SolrQuery api来设置,我自己的代码太过简单,这里用文档中的代码加上注释
SolrQuery query = new SolrQuery(); //初始化SolrQuery对象
query.set("fl", "category,title,price"); //设置要查询的字段,用逗号分开
//query.setFields("category", "title", "price"); //设置要查询的字段
query.set("q", "category:books"); //设置查询参数QueryResponse response = solrClient.query(query); //执行查询,返回responseSolrDocumentList list = response.getResults(); //获得结果集
solr里没有modify的概念,原因我是这样理解的,solr作为一个搜索引擎,本质上是提供简历索引和遍历索引的服务,跟数据库是有区别的,所以想要在solr里面修改文档,那就删除重新创建吧