首先需要下载并解压solr,然后利用cmd进入solr的bin目录下,然后利用solr.cmd start启动。(添加core以及如何使用中文分词,网上教程比较多)
在java中使用:
1.需要在maven中添加相关的solr依赖(主要就是java操作solr的Api包–solrj):
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>6.6.2</version>
</dependency>
2.需要定义一个接收数据的实体类(需要与solr中的core字段对应,对应字段需要加上@Field)
package cn.Ideal.demo.entity;
import lombok.Data;
import org.apache.solr.client.solrj.beans.Field;
import java.io.Serializable;
@Data
public class Job implements Serializable {
private static final long serialVersionUID = 1L;
@Field
private String jobName; //岗位
@Field
private String companyName;//公司名
@Field
private String workAddr;//公司地址
@Field
private String salary;//薪水
@Field
private String pushDate;//发布日期
@Field
private String url;//跳转地址
}
2.然后就是可以构建一个通用的Solr的工具类
初始添加方法:
public static SolrClient client;
private static String url;
static {
url = "http://localhost:8983/solr/jobs";
client = new HttpSolrClient.Builder(url).build();
}
public static <T> boolean batchSaveOrUpdate(List<T> entities) throws IOException, SolrServerException {
DocumentObjectBinder binder = new DocumentObjectBinder();
int total = entities.size();
int count = 0;
for (T entity : entities) {
SolrInputDocument doc = binder.toSolrInputDocument(entity);
client.add(doc);
System.out.printf("添加数据到索引中,总共要添加 %d 条记录,当前添加第%d条 %n",total,++count);
}
client.commit();
return true;
}
分页查询:
public static QueryResponse query(String keywords, int startOfPage, int numberOfPage) throws SolrServerException, IOException {
SolrQuery query = new SolrQuery();
query.setStart(startOfPage);
query.setRows(numberOfPage);
query.setQuery(keywords);
QueryResponse rsp = client.query(query);
return rsp;
}
如果想要让关键字高亮的话,也可以采用:
// 开启高亮
q.setHighlight(true);
// 高亮字段
q.addHighlightField("jobName");
// 高亮字段
q.addHighlightField("companyName");
// 高亮字段
q.addHighlightField("workAddr");
// 高亮单词的前缀
q.setHighlightSimplePre("");
// 高亮单词的后缀
q.setHighlightSimplePost("");
//摘要最长100个字符
q.setHighlightFragsize(100);
之后就直接利用高亮字段替换查询结果即可。
总体而言:solr使用起来十分的简单易懂,就是如果需要做复杂查询时,还是需要了解熟悉他的query格式。
并且solr和ElasticSearch一样都是通过封装Lucene来进行全文检索的。但是在互联网公司中ElasticSearch的使用率是远大于solr的,可能是因为es有完整的生态链Elastic Stack = logstash + es +kibana + beats + ml + security + report 而solr 目前还是单搜索引擎。