Solr安装、中文分词以及定时更新索引

栏目: 后端 · 发布时间: 5年前

内容简介:solr 的安装工作到此就结束了。每个核心都是solr的一个实例,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。这种方式 需要 在 E:\solr-8.1.1\server\solr 目录下创建 new_core文件夹
  • 1.官网下载地址 直接下载 zip格式即可
  • 2.解压下载的压缩包即可完成Solr安装。
  • 3.打开DOS,路径切换至solr_home\bin,执行命令:solr start –p 8983,将solr在8983端口运行,看到以下图片就证明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 创建一个核心
复制代码
  • 4.在浏览器访问:localhost:8983 ,出现如些页面
Solr安装、中文分词以及定时更新索引

solr 的安装工作到此就结束了。

二、创建核心

2.1 创建核心前准备工作

每个核心都是solr的一个实例,一个solr服务可以创建多个核心,每个核心都可以进行自己独立配置。

  • 1.切换至solr_home\server\solr目录,例如:E:\solr-8.1.1\server\solr,在该目录下创建一个文件夹,文件夹名称与核心名称相同。
    Solr安装、中文分词以及定时更新索引
    _v_images/2019062
  • 2.将E:\solr-8.1.1\server\solr\configsets_default路径下的conf文件夹复制到new_core目录(E:\solr-8.1.1\server\solr\new_core)下。

2.2 创建核心

方式一:打开solr界面,进行如图顺序操作。

这种方式 需要 在 E:\solr-8.1.1\server\solr 目录下创建 new_core文件夹

Solr安装、中文分词以及定时更新索引

方式二:bin目录下输入命令:solr create -c new_core (推荐)

三、schema

每个核心core中都有这么一个 schema配置文件。 schema文件可以对索引库的数据类型进行定义,对字段是否进行索引、存储等进行配置,需要针对狠心单独进行配置。 schema的数据类型进本够用,如果不能满足需求,比如说对中文分词、拼音分词等,就可以自定义分词器。 Solr8.1.1 的schema的配置文件名 为managed-schema,home\server\solr\new_core\conf\managed-schema(E:\solr-8.1.1\server\solr\core_issuer\conf)。

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"/>
复制代码

3.2 添加索引字段

  • 方式一:直接修改managed-schema配置文件(不推荐,修改后需要重启服务),例如:
<field name="age" type="pint" indexed="true" stored="true"/>
复制代码
  • 方式二:通过solr页面进行添加。(推荐,不需要重启服务)

![](_v_images/20190623133627274_22114.png =811x)

3.3 配置中文分词工具

  • 1.下载中文分词器IKAnalyzer,下载地址,密码:igt9。
  • 2.解压压缩包包,目录如下:
Solr安装、中文分词以及定时更新索引
  • 3.将两个jar包复制到该路径下:E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib。
  • 4.另外将三个配置文件复制到该路径下:E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\classes。如果没有classes文件夹就新建一个。
  • 5.在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>
复制代码
  • 6.在ext.dic文件中添加自定义的中文词组

  • 需要重启solr

效果如下:

Solr安装、中文分词以及定时更新索引

四、导入索引数据(mysql数据为例)

  • 1.创建 mysql 数据库
Solr安装、中文分词以及定时更新索引
  • 2.在该路径下solr_home\server\solr\new_core\conf(E:\solr-8.1.1\server\solr\core_issuer\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>
复制代码
  • 3.用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字段,该字段已存在,添加会报错

  • 4.打开该路径下文件:solr_home\server\solr\new_core\conf\solrconfig.xml(E:\solr-8.1.1\server\solr\core_issuer\conf\solrconfig.xml),随便找一个与requestHandler同级节点上添加以下配置。如图:
Solr安装、中文分词以及定时更新索引
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
	<lst name="defaults">
		<str name="config">my-data-config.xml</str>
	</lst>
</requestHandler>
复制代码
  • 5.将solr_home\dist(E:\solr-8.1.1\dist)目录下的solr-dataimporthandler-8.1.1.jar和MySQL驱动(随便找个MySQL驱动)复制到solr_home\server\solr-webapp\webapp\WEB-INF\lib(E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib)目录下。
  • 6.重启solr服务。
  • 7.打开solr页面,进行下面操作。
Solr安装、中文分词以及定时更新索引
  • 8.检测数据是否导入成功
Solr安装、中文分词以及定时更新索引

如果对索引字段进行中文分词

添加对索引字段时,fileType :选择text_ik

Solr安装、中文分词以及定时更新索引

效果如图: 查询 鲁西化工 的结果

Solr安装、中文分词以及定时更新索引

五、 Java 客户端solrJ的使用

5.1 导入pom

<!--solr -->
<dependency>
	<groupId>org.apache.solr</groupId>
	<artifactId>solr-solrj</artifactId>
	<version>8.1.1</version>
</dependency>
复制代码

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:陈龙" );
复制代码

过滤查询

//查询name为“陈龙”的user
query.set("q","name:陈龙" );
复制代码

六、定时实时重建索引和增量更新

准备工作:

  • 1.下载jar包:solr-dataimportscheduler-1.1.jar (网上也有1.0版本,但是具体对应solr版本请自行查找)下载地址

** 注意注意注意(重要的事情说三遍):当solr7+以上版本时,该jar包会有问题,配置后服务器启动会报错,页面404,具体详情后面会有解决方案。**

个人网盘分享:链接: pan.baidu.com/s/1HT9WzXQx… 提取码:ehju

这个对7+版本可以正常使用

  • 2.新建文件:dataimport.properties,文件复制下面的就好,具体配置含义已给出注释:
#################################################
#                                               #
#       dataimport scheduler properties         #
#                                               #
#################################################
 
#  to sync or not to sync
#  1 - active; anything else - inactive
# 这里的配置不用修改
syncEnabled=1
 
#  which cores to schedule
#  in a multi-core environment you can decide which cores you want syncronized
#  leave empty or comment it out if using single-core deployment
#  修改成你所使用的core,我这里是我自定义的core:simple
syncCores=core_issuer
 
#  solr server name or IP address
#  [defaults to localhost if empty]
这个一般都是localhost不会变
server=localhost
 
#  solr server port
#  [defaults to 80 if empty]
#  安装solr的tomcat端口,如果你使用的是默认的端口,就不用改了,否则改成自己的端口就好了
port=8983
 
#  application name/context
#  [defaults to current ServletContextListener's context (app) name]
#  这里默认不改
webapp=solr
 
#  URL params [mandatory]
#  remainder of URL
#  这里改成下面的形式,solr同步数据时请求的链接  (我这里使用的 full-import )
params=/dataimport?command=full-import&clean=true&commit=true
 
#  schedule interval
#  number of minutes between two runs
#  [defaults to 30 if empty]
#这里是设置定时任务的,单位是分钟,也就是多长时间你检测一次数据同步,根据项目需求修改
#  开始测试的时候为了方便看到效果,时间可以设置短一点
interval=1
 
#  重做索引的时间间隔,单位分钟,默认7200,即5天; 
#  为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
 
#  重做索引的参数
reBuildIndexParams=/select?qt=/dataimport&command=full-import&clean=true&commit=true
 
#  重做索引时间间隔的计时开始时间,第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000;
#  两种格式:2012-04-11 03:10:00 或者  03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=03:10:00
复制代码

准备好这一个jar包和dataimport.properties文件,开始下面的步骤……

  • 步骤一:将solr-dataimportscheduler.jar包复制到E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF\lib中。
  • 步骤二:在E:\solr-8.1.1\server\solr-webapp\webapp\WEB-INF目录下的web.xml文件中添加监听配置(标签前面):
<listener>
   <listener-class>org.apache.solr.handler.dataimport.scheduler.ApplicationListener</listener-class>
 </listener>
复制代码

注意(又一个注意的地方):org.apache.solr.handler.dataimport.scheduler.ApplicationListener 后面不能有空格,否则可能会报错,且很难发现问题原因。

  • 步骤三:在\solrhome目录下新建一个conf文件夹(与simple文件夹同目录),将dataimport.properties文件放在conf文件夹中。
  • 步骤四:重启tomcat,访问Solr。

七、删除索引库(删除所有数据)的两种方法

  • 1.删除索引库所有数据的方法一:直接用solr可视化界面删除
Solr安装、中文分词以及定时更新索引
  • 2.删除索引库所有数据的方法二:利用solrClient的方法删除所有数据
@Test
    public void deleteAll(){
        try {
            searchCrawlerProductService.deleteAll();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
复制代码
public RestResult deleteAll(){
        try {
            log.debug("删除所有索引");
 
            solrClient.deleteByQuery("*:*");  //把删除的条件设置为"*:*"就可以了
            solrClient.commit();
 
            log.debug("全部删除成功");
        } catch (Exception e) {
            log.debug("删除全部索引失败");
 
            e.printStackTrace();
        }
 
        return RestResult.success("删除索引库成功");
    }
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

从问题到程序-用Python学编程和计算

从问题到程序-用Python学编程和计算

裘宗燕 / 机械工业出版社 / 2017-6-1

本书是以Python为编程语言、面向计算机科学教育中的程序设计基础课程与编程初学者的入门教材和自学读物。本书以Python为工具,详细讨论了与编程有关的各方面问题,介绍了从初级到高级的许多重要编程技术。本书特别强调编程中的分析和思考、问题的严格化和逐步分解、语言结构的正确选择、程序结构的良好组织,以及程序的正确和安全。书中通过大量实例及其开发过程,展示了好程序的特征和正确的编程工作方法。此外,书中......一起来看看 《从问题到程序-用Python学编程和计算》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具