使用环境:
腾讯云服务器
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(); } }