work hard work smart

专注于Java后端开发。 不断总结,举一反三。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Solr安装和使用

Posted on 2021-04-11 23:50  work hard work smart  阅读(94)  评论(0编辑  收藏  举报

使用环境:

腾讯云服务器

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.3\example\solr文件夹就是一个标准的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();
    }



}