Solr采用Lucene搜索库为核心,提供全文索引和搜索开源企业平台,提供REST的HTTP/XML和JSON的API!本教程以solr5.2.1作为测试环境,jdk版本需要1.8和tomcat8。
准备:本文需要下载solr,下载地址http://archive.apache.org/dist/lucene/solr/5.2.1/,并且提供了window版本和linux版本
1、solr压缩包并解压;
2、将 solr 压缩包中 solr-5.2.1\server\webapps\文件夹下有个solr.war,将之复制到Tomcat\webapps\目录下,执行tomcat;
3、将 solr 压缩包中 solr-5.2.1\server\lib\ext 中的 jar 全部复制到 Tomcat\ webapps\solr\WEB-INF\lib 目录中;
4、将 solr 压缩包中 solr-5.2.1 server/resources /log4j.properties 复制到Tomcat\ webapps\solr\WEB-INF\lib 目录中;
5、将 solr 压缩包中 solr-5.2.1/server/solr 目录复制到计算机某个目录下,如D:\testsolr\solr_home(solr创建的core到时会存放在该目录下);
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>D:\programe\apache-tomcat-8.5.29\webapps\solr\solr-home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
7、启动tomcat:访问http://localhost:7070/solr/ (我的tomcat端口)
8、java代码:
package com.chinaexpresscard.picc.base.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrQuery.ORDER;
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.junit.Before;
import org.junit.Test;
public class SolrTest {
private static final String URL = "http://127.0.0.1:7070/solr/db";
private HttpSolrClient server = null;
@Before
public void init() {
// 创建 server
server = new HttpSolrClient(URL);
}
//@Test
public void addDoc() {
Collection<SolrInputDocument> docs = new ArrayList<SolrInputDocument>();
SolrInputDocument doc = new SolrInputDocument();
/*
doc.addField("id", 3);
doc.addField("name", "Solr Input Documents 1");
doc.addField("manu", "this is SolrInputDocuments 1 content");
docs.add(doc);*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
for (int i = 0; i < 15; i++) {
doc = new SolrInputDocument();
doc.addField("id", (i+1));
doc.addField("incubationdate_dt", new Date());
doc.addField("name", "Solr Input Documents "+(i+1));
doc.addField("manu", "this is SolrInputDocuments "+(i+1)+" content");
docs.add(doc);
}
//doc.addChildDocument(child);
try {
UpdateResponse response = server.add(docs);
/*List<String> a = new ArrayList<>();
for (int i = 0; i < 13; i++) {
a.add(String.valueOf(i));
}
server.deleteById(a);*/
// 提交
server.commit();
System.out.println("########## Query Time :" + response.getQTime());
System.out.println("########## Elapsed Time :" + response.getElapsedTime());
System.out.println("########## Status :" + response.getStatus());
} catch (Exception e) {
System.err.print(e);
}
}
/**
* 查询
*/
@Test
public void testQuery() {
String queryStr = "*:*";
SolrQuery params = new SolrQuery(queryStr);
//起始记录
params.setStart(0);
//每页显示多少条
params.setRows(10);
//排序
params.setSort("incubationdate_dt", ORDER.asc);
//全文搜索
params.setQuery("Input");
//params.set("rows", 10);
try {
QueryResponse response = null;
response = server.query(params);
SolrDocumentList list = response.getResults();
System.out.println("########### 总共 : " + list.getNumFound() + "条记录");
for (SolrDocument doc : list) {
System.out.println("######### id : " + doc.get("id") +
" name : " + doc.get("name") +
" incubationdate_dt:" + doc.get("incubationdate_dt"));
}
} catch (SolrServerException e) {
System.err.print(e);
}
}
}
8、pom.xml
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>5.0.0</version>
</dependency>