使用环境:
腾讯云服务器
JDK8
tomcat8.0.45
一、下载Solr。
这里使用的版本为4.1.0
下载地址: https://archive.apache.org/dist/lucene/solr/4.1.0/
cd /home/tools/solr
tar -xf solr-4.1.0.tar
文件如下:
cd /home/tools/solr/solr-4.1.0

二、默认使用Jetty部署
cd /home/tools/solr/solr-4.1.0/example
java -jar start.jar
访问地址:http://xx.xx.xx.xx:8983/solr

测试分词

默认情况下没有安装中文分词,则把所有的单个汉字拆分。
SolrHome目录: /home/tools/solr/solr-4.1.0/example/solr

solrcore目录: /home/tools/solr/solr-4.1.0/example/solr/collection1

三、生产上一般使用tomcat部署solr
1、使用版本4.10.3
https://archive.apache.org/dist/lucene/solr/4.10.3/
/home/tools
unzip solr-4.10.3.zip
cd solr-4.10.3
2、部署solr.war 到tomcat下
将/home/tools/solr-4.10.3/dist 的solr-4.10.3.war 文件复制到tomcat的webapp下,改名为solr.war
cp /home/tools/solr-4.10.3/dist/solr-4.10.3.war /home/tools/tomcat8.0.45/webapps/
/home/tools/tomcat8.0.45/webapps/
mv solr-4.10.3.war solr.war
3、启动tomcat, solr.war自动解压
4、拷贝实ext中的jar到solr的lib下
cd /home/tools/solr-4.10.3/example/lib
cp ext/* /home/tools/tomcat8.0.45/webapps/solr/WEB-INF/lib/
5、创建一个solrhome,solrhome就是solr服务器配置文件存放的目录。
solr-4.10.3examplesolr文件夹就是一个标准的solrhome 可以直接使用
cp -r /home/tools/solr-4.10.3/example/solr /home/files/
cd /home/files
mv solr solrhome
cd solrhome

1, collection1文件夹就是一个solrcore,一个solrcore就是一个完整的索引库
2, collection1文件夹下有一个conf文件夹,此文件夹中包含了solrcore的所有配置文件
3, solrconfig.xml和schema.xml 两个重要的配置文件
solrconfig.xml: 配置了索引库的扩展jar包的位置。
requedtHandler: 配置了solr对外提供服务的网址
查询索引使用的网址:

维护索引时使用的网址

defaultQuery: 默认的查询语法

可以根据实际情况对solrconfig.xml进行配置,如果使用默认可以修改此配置。
6、告诉Solr服务器solrhome的位置
vi /home/tools/tomcat8.0.45/webapps/solr/WEB-INF/web.xml

7、启动tomcat

二、Solr的使用
1、增加依赖
<dependencies>
<!-- solr -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-core</artifactId>
<version>4.1.0</version>
</dependency>
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>4.1.0</version>
</dependency>
</dependencies>
2、增加Person类
package com.example.solrdemo1;
import org.apache.solr.client.solrj.beans.Field;
public class Person {
@Field(value = "id")
private String id;
@Field(value = "name")
private String name;
@Field(value = "description")
private String description;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
3、增加SolrUtil类
package com.example.solrdemo1;
import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import java.io.IOException;
import java.util.List;
public class SolrUtil {
//solr服务器所在的地址,collection1为的文档库目录
private final static String SOLR_URL = "http://118.xx.xx.101:8983/solr/collection1";
/**
* 获取客户端的连接
*
* @return
*/
public SolrServer createSolrServer() {
SolrServer solrServer = new HttpSolrServer(SOLR_URL);
return solrServer;
}
/**
* 往索引库添加文档
*
* @throws SolrServerException
* @throws IOException
*/
public void addDoc() throws Exception {
SolrInputDocument document = new SolrInputDocument();
document.addField("id", "doc01");
document.addField("name", "商品1");
document.addField("description", "商品描述1");
SolrServer solrServer = new HttpSolrServer(SOLR_URL);
////把文档写入索引库
solrServer.add(document);
//提交
solrServer.commit();
}
/**
* 根据ID从索引库删除文档
*
* @throws SolrServerException
* @throws IOException
*/
public void deleteDocumentById() throws SolrServerException, IOException {
SolrServer solrServer = new HttpSolrServer(SOLR_URL);
solrServer.deleteById("doc01");
solrServer.commit();
}
/**
* 根据设定的查询条件进行文档字段的查询
* @throws Exception
*/
public void querySolr() throws Exception {
SolrServer solrServer = new HttpSolrServer(SOLR_URL);
SolrQuery query = new SolrQuery();
//下面设置solr查询参数
//query.set("q", "*:*");// 参数q 查询所有
query.set("q", "商品");//相关查询,比如某条数据某个字段含有周、星、驰三个字 将会查询出来
//参数fq, 给query增加过滤查询条件
//query.addFacetQuery("id:[0 TO 9]");
// query.addFilterQuery("description:商品");
//参数df,给query设置默认搜索域,从哪个字段上查找
query.set("df", "name");
//参数sort,设置返回结果的排序规则
//query.setSort("id",SolrQuery.ORDER.desc);
//设置分页参数
query.setStart(0);
query.setRows(10);
//设置高亮显示以及结果的样式
query.setHighlight(true);
query.addHighlightField("name");
query.setHighlightSimplePre("<font color='red'>");
query.setHighlightSimplePost("</font>");
//执行查询
QueryResponse response = solrServer.query(query);
//获取返回结果
SolrDocumentList resultList = response.getResults();
for(SolrDocument document: resultList){
System.out.println("id:"+document.get("id")+" document:"+document.get("name")+" description:"+document.get("description"));
}
//获取实体对象形式
List<Person> persons = response.getBeans(Person.class);
System.out.println(persons.get(0).getName());
}
public static void main(String[] args) throws Exception {
SolrUtil solr = new SolrUtil();
//solr.addDoc();
//solr.querySolr();
solr.deleteDocumentById();
}
}