Solr7.5安装和使用详细教程(单机版)

文章目录
一、安装
二、创建核心
2.1 创建核心前准备工作
2.2 创建核心
三、schame
3.1 schema主要成员
3.2 添加索引字段
3.3 配置中文分词器
四、导入索引数据(MySQL数据库为例)
五、Java客户端solrJ的使用
5.1 导入pom
5.2 编写model
5.3 写测试代码
一、安装
官网下载地址。
解压下载的压缩包即可完成Solr安装。
打开DOS,路径切换至solr_home\bin,执行命令:solr start –p 8888,将solr在8888端口运行,看到以下图片就证明solr启动成功了。(Solr默认端口为8983)

solr常用命令
solr start –p p_num   启动solr
solr restart –p p_num   重启solr
solr stop –p p_num   关闭solr
solr create –c c_name   创建一个核心    

在浏览器访问:localhost:8888,会出现以下页面。
solr安装到此已经完成。
二、创建核心
2.1 创建核心前准备工作
每个核心都是solr的一个实例,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。

切换至solr_home\server\solr目录,例如:D:\Program Files\solr-7.5.0\server\solr,在该目录下创建一个文件夹,文件夹名称与核心名称相同。

将D:\Program Files\solr-7.5.0\server\solr\configsets_default路径下的conf文件夹复制到new_core目录(D:\Program Files\solr-7.5.0\server\solr\new_core)下。
2.2 创建核心
方式一:打开solr界面,进行如图顺序操作。(推荐)

方式二:bin目录下输入命令 solr create –c new_core

三、schame
schame文件可以对索引库的数据类型进行定义,对字段是否进行索引、储存等进行设置,要针对核心单独进行配置。
schame的数据类型基本够用,如果不能满足需求,比如说对中文分词、拼音分词等,就可以自定义分词器。
Solr 7.5的schema配置文件名为managed-schema,路径为solr_home\server\solr\new_core\conf\managed-schema(D:\Program Files\solr-7.5.0\server\solr\new_core\conf\managed-schema)。

3.1 schema主要成员
(1) fieldType:为field定义类型,最主要作用是定义分词器,分词器决定着如何从文档中检索关键字。
(2) analyzer:fieldType的子元素,是分词器,由tokenizer和filter组成。例如

<fieldType name="text_tr" class="solr.TextField" positionIncrementGap="100">
    <analyzer>
      <tokenizer class="solr.StandardTokenizerFactory"/>
      <filter class="solr.TurkishLowerCaseFilterFactory"/>
      <filter class="solr.StopFilterFactory" words="lang/stopwords_tr.txt" ignoreCase="false"/>
      <filter class="solr.SnowballPorterFilterFactory" language="Turkish"/>
    </analyzer>
  </fieldType>

(3) field:字段,用来创建索引,如果这个字段需要生成索引,则需要设置的indexed为true,需要存储设置stored属性为true。例如:

<field name="age" type="pint" indexed="true" stored="true"/>
1
3.2 添加索引字段
方式一:直接修改managed-schema配置文件(不推荐,修改后需要重启服务),例如:

<field name="age" type="pint" indexed="true" stored="true"/>
1
方式二:通过solr页面进行添加。(推荐,不需要重启服务)


3.3 配置中文分词器
下载中文分词器IKAnalyzer,下载地址,密码:igt9。
解压压缩包包,目录如下:

将两个jar包复制到该路径下:D:\Program Files\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib。
另外将三个配置文件复制到该路径下:D:\Program Files\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\classes。如果没有classes文件夹就新建一个。
在schema中添加分词器。
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>

在ext.dic文件中添加自定义的中文词组,以这句话为例:今天早上路过一家叫做爱的绽放的花店,看到一盆仙人球,毛茸茸的,甚是好看,我把它带回家,取名小毛球。

添加词组前,分词情况如下:

ext.dic文件中添加自定义词组:

重启服务,执行分词,结果如下:

四、导入索引数据(MySQL数据库为例)
创建MySQL数据库。

在该路径下solr_home\server\solr\new_core\conf(D:\Program Files\solr-7.5.0\server\solr\new_core\conf)下新建my-data-config.xml文件。
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
    <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr_test"
                user="root" password=""/>
    <document>
        <entity name="user" query="select * from user">
            <field column="id" name="id"/>
            <field column="age" name="age"/>
            <field column="name" name="name"/>
            <field column="hobby" name="hobby"/>
        </entity>
    </document>
</dataConfig>

用solr添加数据库字段对应的索引字段,添加后打开managed-schema文件会看到:
<field name="name" type="string" indexed="true" stored="true"/>
<field name="age" type="pint" indexed="true" stored="true"/>
<field name="hobby" type="string" indexed="true" stored="true"/>

请勿添加id字段,该字段已存在,添加会报错

打开该路径下文件:solr_home\server\solr\new_core\conf\solrconfig.xml(D:\Program Files\solr-7.5.0\server\solr\new_core\conf\solrconfig.xml),随便找一个与requestHandler同级节点上添加以下配置。如图:

代码:
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
    <lst name="defaults">
        <str name="config">my-data-config.xml</str>
    </lst>
</requestHandler>

将solr_home\dist(D:\Program Files\solr-7.5.0\dist)目录下的solr-dataimporthandler-7.5.0.jar和MySQL驱动(随便找个MySQL驱动)复制到solr_home\server\solr-webapp\webapp\WEB-INF\lib(D:\Program Files\solr-7.5.0\server\solr-webapp\webapp\WEB-INF\lib)目录下。
重启solr服务。
打开solr页面,进行下面操作。

检测数据是否导入成功。

五、Java客户端solrJ的使用
5.1 导入pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.freesky</groupId>
    <artifactId>solr-test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.solr/solr-solrj -->
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
            <version>7.5.0</version>
        </dependency>
    </dependencies>
</project>

5.2 编写model
public class User {

    @Field(value = "id")
    private String id;
    @Field(value = "name")
    private String name;
    @Field(value = "age")
    private Integer age;
    @Field(value = "hobby")
    private String hobby;

    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 Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getHobby() {
        return hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", hobby=" + hobby +
                '}';
    }
}

5.3 写测试代码
public class Main {
    private static final String SOLR_URL = "http://localhost:8888/solr";
    private static final String CORE_NAME = "new_core";
    public static void main(String[] args) throws IOException, SolrServerException {
        HttpSolrClient client = new HttpSolrClient.Builder(SOLR_URL).withConnectionTimeout(10000).withSocketTimeout(60000).build();
        SolrQuery query = new SolrQuery();
        //设置要查询的字段
        query.setFields("id","name", "age","hobby");
        //查询全部
        QueryResponse response = client.query(CORE_NAME,query);
        //查询结果
        SolrDocumentList results = response.getResults();
        System.out.println("结果总数:" + results.getNumFound());
        //遍历列表
        System.out.println("文档结果:");
        for (SolrDocument doc : results) {
            System.out.printf("[id:%s,name:%s,age:%s,hobby:%s]\n", doc.get("id"), doc.get("name"), doc.get("age"), doc.get("hobby"));
        }
        //得到实体对象
        List<User> userList = response.getBeans(User.class);
        System.out.println("转为实体对象:\n"+Arrays.toString(userList.toArray()));
    }
}

按条件单个查询:

//查询name为“陈龙”的user
query.set("q","name:陈龙" );
1
2
按条件模糊查询:

//查询name以“四”结尾的user
query.set("q","name:*四" );

//查询name以“陈”开头的user
query.set("q","name:陈*" );

//查询name包含“玉”的user
query.set("q","name:*玉*" );

多条件查询:

//查询id为“1”,并且name为“陈龙”,或者age为“28”岁,或者爱好包含“钓鱼”的user
query.set("q","id:1 AND name:陈龙 OR age:28 OR hobby:钓鱼" );

过滤查询:

//过滤查询,age为1到30岁的user
query.set("fq", "age:[1 TO 30]");

设置排序:

//以age降序
query.addSort("age", SolrQuery.ORDER.desc);

设置分页:

 //开始位置
 query.setStart(0);
 //每页3条
 query.setRows(3);

点击下面头像下载配置好的solr服务
--------------------- 
作者:风中漫步者 
来源:CSDN 
原文:https://blog.csdn.net/qwqw3333333/article/details/84333510 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

未来AI编程

共鸣===鼓励 打赏您随意

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值