solr的使用详解

一、Solr简介

        由于搜索引擎功能在门户社区中对提高用户体验有着重在门户社区中涉及大量需要搜索引擎的功能需求,目前在实现搜索引擎的方案上有几种方案可供选择: 

  • 基于Lucene自己进行封装实现站内搜索。工作量及扩展性都较大,不采用。 
  • 调用Google、Baidu的API实现站内搜索。同第三方搜索引擎绑定太死,无法满足后期业务扩展需要,暂时不采用。 
  • 基于Compass+Lucene实现站内搜索。适合于对数据库驱动的应用数据进行索引,尤其是替代传统的like ‘%expression%’来实现对varchar或clob等字段的索引,对于实现站内搜索是一种值得采纳的方案。但在分布式处理、接口封装上尚需要自己进行一定程度的封装,暂时不采用。 
  • 基于Solr实现站内搜索。封装及扩展性较好,提供了较为完备的解决方案,因此在门户社区中采用此方案,后期加入Compass方案。

Solr是一个基于Lucene的Java搜索引擎服务器。Solr 提供了层面搜索、命中醒目显示并且支持多种输出格式(包括 XML/XSLT 和 JSON 格式)。它易于安装和配置,而且附带了一个基于 HTTP 的管理界面。Solr已经在众多大型的网站中使用,较为成熟和稳定。Solr 包装并扩展了 Lucene,所以Solr的基本上沿用了Lucene的相关术语。更重要的是,Solr 创建的索引与 Lucene 搜索引擎库完全兼容。通过对Solr 进行适当的配置,某些情况下可能需要进行编码,Solr 可以阅读和使用构建到其他 Lucene 应用程序中的索引。此外,很多 Lucene 工具(如Nutch、 Luke)也可以使用Solr 创建的索引。

二、Solr下载及安装

1.由于solr是java语言编写,需要JDK支持,先安装JDK8;

2.下载Solr,最新版本8.0.0 地址:http://mirrors.shu.edu.cn/apache/lucene/solr/8.0.0/       (Windows版本箭头所示)

3.下载solr所需的IK分词器及mysql数据库连接jar和配置文件等资源文件,可用楼主自己收集的solr所需资源文件。

下载地址:https://download.csdn.net/download/javayoucome/11068587

4.解压下载好的solr-8.0.0.zip,例如解压到桌面,目录结构如下:

5.运行Solr

Solr的运行分为单机运行和集群运行,一般项目单机版就够用,访问量大的项目需要集群版,集群版配置较复杂,可自行配置,这里为速度入门以单机为例:

5.1 在bin目录下执行bin/solr start 此命令会启动solr应用服务器默认端口为8983,如果想指定端口号启动可以加参数–p例 如:solr start –p 8888,如下图表示启动成功。

solr的相关命令   不加   -p 端口  默认8983:

  • solr start -p 端口号  (指定端口启动)
  • solr stop -p 端口号(指定端口关闭)
  • solr restart -p 端口号(指定端口重启)
  • solr status (查看solr运行状态)

5.2 启动solr服务器后,浏览器直接访问127.0.0.1:8983访问solr服务器后台。

安装完成。

三、Solr的使用。

先介绍下solr的使用流程:1、创建索引字段 2、添加索引数据  3、查询索引数据 4、更新索引数据

白话解释:现在solr服务器里什么数据都没有,首先你得和类似数据库先创建一些你要查询的字段,在solr里叫做“索引”,创建好了索引如“id”,"name","price",再往这些索引中添加一些数据,之后再查询这些数据,还可以对索引数据所更新。

本文主要以创建索引字段和添加索引数据为主要介绍,查询索引的内容可自行查找,因为查询数据中的复杂查询知识较多并包括solrj客户端的使用,篇幅有限,请见谅。

1.Core

solr中一个核心(core)相当于一个搜索引擎,sole想要创建索引需要创建一个Core,可理解为数据的表。

创建Core有2种方法:

第一种:命令创建Core(推荐)

  • # 创建core,-c指定创建的core名
    示例:./solr create -c wtao_core
  • # 删除core,-c指定删除的core名
    示例:./solr delete -c wtao_core

第二种:使用控制台创建core(如下图)

创建完core后可查看对应的目录结构

2.创建完core后,主角要登场了>>创建索引字段 (下图是自己core中配置索引的文件)

创建索引,solr自带很多默认类型,如pint,string,pflou等t等,但支持中文类型solr没有,需要自己先创建一个中文分词的类型,主流的使用IKAnalyzer分词器。

2.1 将分词器的两个jar(ik-analyzer-solr5-5.x.jar,solr-analyzer-ik-5.1.0.jar)放在\solr-8.0.0\server\solr-webapp\webapp\WEB-INF\lib目录下。

2.2在\solr-8.0.0\server\solr-webapp\webapp\WEB-INF\下创建classes文件夹,将ik分词器的三个配置文件放入里面(如图)

2.3将下面配置粘贴到自己的core文件夹下的conf下的managed-schema文件中。即可在索引字段使用此类型。

<!-- 中文分词 -->
<dynamicField name="*_txt_ik" type="text_ik"  indexed="true"  stored="true"/>
<fieldType name="text_ik" class="solr.TextField">
	<analyzer type="index">
		<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
		<!--<filter class="solr.WordDelimiterGraphFilterFactory"/>-->
	</analyzer>
	<analyzer type="query">
		<tokenizer class="org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart="true"/>
		<!--<filter class="solr.WordDelimiterGraphFilterFactory"/>-->
	</analyzer>
</fieldType>

重启solr,可查看分词器是否成功配置(如图表示索引中可以使用text_ik的类型了)。

2.4可以创建我们需要的索引了,目标创建3个索引:id,name,price

查看自己core下的managed-schema文件,id是默认提供的,我们只需要创建name,和price即可。

创建索引有三种方式:

第一种:控制台添加索引(推荐),不用重启即可生效

第二种:直接在managed-schema配置文件中添加如下配置,后重启solr生效

<!-- name:索引名称 type:索引类型 indexed:是否为索引 stored:索引值是否保存 -->
<field name="price" type="pfloat" indexed="true" stored="true" />

第三种:用Solr - API提供的接口操作索引字段

API官网可查看:http://lucene.apache.org/solr/guide/6_6/schema-api.html

3.添加索引值

索引字段创建完,就可以添加索引值了,添加索引值用多种方法,介绍2种简单方法。

3.1第一种,控制台直接添加数据。

查看数据,表示添加索引值成功,这种添加索引方法,就是测试用,没有实际意义。

3.2第二种:数据库导入数据(主流添加)

数据库导入数据,是通过查询数据库数据,直接添加到索引。

3.2.1添加数据库导入数据所需的三个jar文件,在solr-8.0.0下的dist目录下取出solr-dataimporthandler-8.0.0.jar,solr-dataimporthandler-extras-8.0.0.jar两个jar文件。

和上面“资源包“里的mysql-connector-java-5.1.7-bin.jar文件一起放入自己core下的lib目录中,没有lib文件夹自己创建,如图。

3.2.2创建数据库对应索引字段的配置文件 “资源包”中的data-config.xml。

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
    <!-- 数据库信息 -->
    <dataSource type="JdbcDataSource" 
        driver="com.mysql.jdbc.Driver" 
        url="jdbc:mysql://127.0.0.1:3306/shop?useUnicode=true&amp;characterEncoding=utf-8" 
        user="root" password="123456"/>
    <document>
        <!-- document实体 -->
        <entity name="item" query="SELECT * from product">
            <!-- 数据库字段映射solr字段,数据库中有id,name,price字段 -->
			<field column="id" name="id" /> 
			<field column="name" name="name" />
			<field column="price" name="price" />
        </entity>
    </document>
</dataConfig>

3.2.3 数据库导入索引的配置文件data-config.xml,为了让Core识别,将如下配置添加到solrconfig.xml文件中,并将data-config.xml放在和solrconfig.xml同级目录下。

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

添加效果

3.2.4重启solr让文件生效,访问Dataimport.

如果出现上面的样式,恭喜你,可以导入数据了,full-import:是导入所有数据,data-import:是导入索引中没有的数据

点击执行。

再次查询结果:恭喜你~~

至此solr的添加索引完成,对于Solr查询和solrJ的使用和集群的搭建,内容也不少,篇幅有限,大家可以自行完成,只要知道solr工作原理,理解solr就方便了。

(完)

1 概述 4 1.1 企业搜索引擎方案选型 4 1.2 Solr的特性 4 1.2.1 Solr使用Lucene并且进行了扩展 4 1.2.2 Schema(模式) 5 1.2.3 查询 5 1.2.4 核心 5 1.2.5 缓存 5 1.2.6 复制 6 1.2.7 管理接口 6 1.3 Solr服务原理 6 1.3.1 索引 6 1.3.2 搜索 7 1.4 源码结构 8 1.4.1 目录结构说明 8 1.4.2 Solr home说明 9 1.4.3 solr的各包的说明 10 1.5 版本说明 11 1.5.1 1.3版本 11 1.5.2 1.4版本 12 1.6 分布式和复制 Solr 架构 13 2 Solr的安装与配置 13 2.1 在Tomcat下Solr安装 13 2.1.1 安装准备 13 2.1.2 安装过程 14 2.1.3 验证安装 15 2.2 中文分词配置 15 2.2.1 mmseg4j 15 2.2.2 paoding 19 2.3 多核(MultiCore)配置 22 2.3.1 MultiCore的配置方法 22 2.3.2 为何使用多core ? 23 2.4 配置文件说明 23 2.4.1 schema.xml 24 2.4.2 solrconfig.xml 25 3 Solr的应用 29 3.1 SOLR应用概述 29 3.1.1 Solr的应用模式 29 3.1.2 SOLR使用过程说明 30 3.2 一个简单的例子 30 3.2.1 Solr Schema 设计 30 3.2.2 构建索引 30 3.2.3 搜索测试 31 3.3 搜索引擎的规划设计 32 3.3.1 定义业务模型 32 3.3.2 定制索引服务 34 3.3.3 定制搜索服务 34 3.4 搜索引擎配置 34 3.4.1 Solr Schema 设计(如何定制索引的结构?) 34 3.5 如何进行索引操作? 36 3.5.1 基本索引操作 36 3.5.2 批量索引操作 37 3.6 如何进行搜索 39 3.6.1 搜索语法 39 3.6.2 排序 42 3.6.3 字段增加权重 42 3.6.4 Solr分词器、过滤器、分析器 42 3.6.5 Solr高亮使用 46 4 SolrJ的用法 46 4.1 搜索接口的调用实例 46 4.2 Solrj的使用说明 47 4.2.1 Adding Data to Solr 47 4.2.2 Directly adding POJOs to Solr 49 4.2.3 Reading Data from Solr 51 4.3 创建查询 51 4.4 使用 SolrJ 创建索引 52 4.5 Solrj包的结构说明 53 4.5.1 CommonsHttpSolrServer 53 4.5.2 Setting XMLResponseParser 53 4.5.3 Changing other Connection Settings 53 4.5.4 EmbeddedSolrServer 54 5 Solr的实际应用测试报告 54 5.1 线下压力测试报告 54 5.2 线上环境运行报告 54 6 solr性能调优 55 6.1 Schema Design Considerations 55 6.1.1 indexed fields 55 6.1.2 stored fields 55 6.2 Configuration Considerations 55 6.2.1 mergeFactor 55 6.2.2 mergeFactor Tradeoffs 56 6.3 Cache autoWarm Count Considerations 56 6.4 Cache hit rate(缓存命中率) 56 6.5 Explicit Warming of Sort Fields 56 6.6 Optimization Considerations 56 6.7 Updates and Commit Frequency Tradeoffs 56 6.8 Query Response Compression 57 6.9 Embedded vs HTTP Post 57 6.10 RAM Usage Considerations(内存方面的考虑) 57 6.10.1 OutOfMemoryErrors 57 6.10.2 Memory allocated to the Java VM 57 7 FAQ 58 7.1 出现乱码或者查不到结果的排查方法: 58
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值