首页 > 其他分享 >solr服务器

solr服务器

时间:2022-11-01 23:00:40浏览次数:71  
标签:xml Solr 分词 7.6 服务器 solr solrQuery

目标:

solr的概念
solr服务器的搭建和使用
solr中导入数据库数据
项目中怎么使用solr实现商品搜索功能

一.solr相关概念

1.1 什么是Solr?

solr是一个独立的企业级搜索应用服务器,它是对外提供类似于web-service的api接口,用户可以通过http请求,发送一定格式的xml数据到solr,生成索引,也可以发送http get请求,请求solr服务器查询数据,将查询出的数据也是以xml格式返回.

1.2.为什么要用solr?

1.数据库的模糊查询没有分词的功能,solr有,可以更有效的查询到我们需要的数据

2.从solr 服务器中查询数据会比从数据库查询速度要快.

1.3.solr的工作方式

文档通过Http利用XML 加到一个搜索集合中。Solr查询该集合也是通过http收到一个XML/JSON响应来实现。它的主要特性包括:高效、灵活的缓存功能,垂直搜索功能,高亮显示搜索结果,通过索引复制来提高可用性,提供一套强大Data Schema来定义字段,类型和设置文本分析,提供基于Web的管理界面等。

1.4. solr特点

1.高级全文搜索能力:由Lucene 提供支持,Solr可实现强大的匹配功能,包括短语,通配符,联接,分组以及任何数据类型 .

2.拥有基于标准的开放式接口- XML、JSON 和 HTTP

3.综合的管理界面

4.高度的可扩展性和容错性

5.能够实时索引

6.可扩展的插件架构,Solr可以和Hadoop一起使用。由于Hadoop处理大量数据,Solr帮助我们从这么大的源中找到所需的信息。不仅限于搜索,Solr也可以用于存储目的。像其他NoSQL数据库一样,它是一种非关系数据存储和处理技术。

1.5.solr版本和jdk需求关系

版本 发布时间 说明

1.1 2007-01-18 -

....

4.0.0 2013-01-16 Java 1.6 以上,ZooKeeper 3.3.6;引入solrcloud

....

4.7.1 2014-04-01 Java 1.6 以上,最后一个采用旧版配置方法版本

4.8.0 2014-04-27 Java 1.7 以上,ZooKeeper 3.4.6

....

6.0.0 2016-04-07 Java 1.8 以上,Jetty 9.3.8

.....

1.6. Solr 相关链接

​ Solr 各版本下载地址:​​http://archive.apache.org/dist/lucene/solr/​

​ Solr 官方网站:​​http://lucene.apache.org/solr/resources.html​

​ 详细的solr中文手册链接:​​https://www.w3cschool.cn/solr_doc/​

二.solr的安装

2.1 下载jar 7.6.0

2.2 解压

解压出来的文件目录


2.3 启动服务器

2.4访问

输入: ​​http://localhost:8983​​

三 创建core

在solr中,每一个core代表一个索引库,里面保存索引数据以及配置信息

solr中可以有多个core,也就相当于mysql服务器下可以多个数据库

3.1 方法1: 用命令创建

  1. solr create -c core名称
  2. core的存放路径

3.2 方法2:界面创建

1.在solr-7.6.0/server/solr 文件夹下创建一个core文件夹 ,取名为students(商城项目里取名为goods)

  1. 将C:\solr-7.6.0\server\solr\configsets\\_default下的conf文件复制一份到students(或goods)文件夹下
    3.在solr界面Add Core,(之前取名goods的 这里名字就为goods)

四. 添加中文分词

选择刚才创建的core,点击Analysis进入分词分析页面,输入要分词的句子,选择分词库,点击分析按钮,即可看到分词结果

solr默认不支持中文分词

4.1测试自带的中文分词(商城项目配置 跳过这一步 直接用后面的ik分词器)

4.1.1 添加中文分词插件

solr 7.6中自带中文分词插件,将solr-7.6.0\contrib\analysis-extras\lucene-libs\lucene-analyzers-smartcn-7.6.0.jar 复制到 solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib 目录中

4.1.2配置中文分词

修改 solr-7.6.0\server\solr\articles【创建的core的名称】\conf\managed-schema文件

添加我们的中文配置【在eclipse/idea等工具里打开,记事本打开容易出现编码问题】


<!-- Chinese -->
<fieldType name="text_cn" class="solr.TextField" positionIncrementGap="100">

<analyzer type="index">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>

<analyzer type="query">
<tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
</analyzer>

</fieldType>

4.1.3重启solr,测试中文分词

solr restart -p 8983

4.2 测试中文分词起ik-analyzer

4.2.1 下载ik-analyzer-7.6.0.jar包

并添加到solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib 目录中

4.2.2 在创建的core里的配置文件managed-schema.xml中添加

<!-- ik分词器 -->
<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>

4.2.3 重启服务器, 测试

solr restart -p 8983

五.导入数据库中数据

  1. 将数据库jar包(在发你们的solr资料文件里)


和solr-7.6.0\\dist下的dataimporthandler-7.6.0架包 (注意是mysql驱动和dataimport两个jar包)复制到 C:\solr-7.6.0\server\solr-webapp\webapp\WEB-INF\lib


  1. 创建data-config.xml文件

goods/conf文件夹下创建mysql-db文件夹,然后在mysql-db文件夹中创建data-config.xml文件,文件中添加如下内容

<?xml version="1.0" encoding="utf-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/sc"
user="root"
password="root"
/>

<document>
<entity name="goods" query="select goods_id,goods_name,sales_price,goods_img,cid from goods">
<field column="goods_id" name="id" />
<field column="goods_name" name="goodsName" />
<field column="sales_price" name="salesPrice" />
<field column="goods_img" name="goodsImg" />
<field column="cid" name="cid" />
</entity>

</document>
</dataConfig>
  1. 添加document中的字段
    在managed-schema.xml文件中添加


注意: id,version,root 不能删除

_text_ 不需要 可以删除

```
<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
<!-- docValues are enabled by default for long type so we don't need to index the version field -->
<field name="_version_" type="plong" indexed="false" stored="false"/>
<field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
<field name="goodsName" type="text_ik" indexed="true" stored="true" multiValued="false" />
<field name="salesPrice" type="plong" indexed="true" stored="true" multiValued="false" />
<field name="goodsImg" type="string" indexed="true" stored="true" multiValued="false" />
<field name="cid" type="string" indexed="true" stored="true" multiValued="false" />
```
  1. 导入data-config.xml文件
    在solrconfig.xml文件中添加
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">mysql-db/data-config.xml</str>
</lst>
</requestHandler>
  1. 重启solr
  2. 导入数据
  1. 测试查询

六. ssm中使用solr

  1. 添加jar包
<!-- solr jar包 -->
<dependency>
<groupId>org.apache.solr</groupId>
<artifactId>solr-solrj</artifactId>
<version>7.6.0</version>
</dependency>
  1. 在spring.xml中配置
<!-- 配置solr客户端对象 -->
<bean id="httpSolrClient" class="org.apache.solr.client.solrj.impl.HttpSolrClient">
<constructor-arg name="builder" value="http://localhost:8983/solr/goods" />
</bean>
  1. 修改pojo中goods类
  2. 控制层写solr查询操作
@RequestMapping("showGoodsByWhere2")
public String search2(@RequestParam(name = "pageIndex",defaultValue = "1") int pageIndex, int cid,@RequestParam(name = "keyword",defaultValue = "西") String keyword) throws IOException, SolrServerException {
//创建一个query对象
SolrQuery solrQuery=new SolrQuery();
//设置默认的查询范围
solrQuery.set("df", "goodsName");
//设置查询条件
solrQuery.setQuery(keyword+"*");
//设置过滤条件
solrQuery.setFilterQueries("cid:"+cid);
//设置排序条件
solrQuery.setSort("goodsPrice",ORDER.desc);

solrQuery.addField("id");
solrQuery.addField("goodsName");
solrQuery.addField("salesPrice");
solrQuery.addField("goodsImg");
//solrQuery.addField("cid");
solrQuery.setStart(0);
//每页显示多少行
solrQuery.setRows(2);
//设置高亮(开启)
solrQuery.setHighlight(true);
//设置高亮域
solrQuery.addHighlightField("goodsName");
//设置高亮前缀
solrQuery.setHighlightSimplePre("<em>");
//设置高亮后缀
solrQuery.setHighlightSimplePost("</em>");

// 创建组合条件串
// StringBuilder params = new StringBuilder("cid:" + cid);
// params.append(" and goodsName:"+keyword);
// solrQuery.setQuery(params.toString());

//将查询对象传递到服务器端
QueryResponse queryResponse= httpSolrClient.query(solrQuery);

httpSolrClient.commit();

List<Goods> list= queryResponse.getBeans(Goods.class);

System.out.println(list.toString());
// ModelAndView modelAndView=new ModelAndView();
//modelAndView.addObject("goodsList",list);
// modelAndView.setViewName("searchList");

//return modelAndView;
return "success";
}

标签:xml,Solr,分词,7.6,服务器,solr,solrQuery
From: https://blog.51cto.com/u_15707781/5815071

相关文章

  • 阿里云服务器中XAMPP(Apache)无法用外网访问的原因之一
    我的httpd.conf文件(如图1)中的Listen配置为了8081(如图2),并将httpd-xampp.conf中的Requirelocal全部修改为了Requireallgranted,但仍无法用外网访问,最终发现是自己的阿里云服......
  • Springboot 项目打成jar包部署到服务器中的方式
    Springboot项目打成jar包部署到服务器中的方式前言:目前,前后端分离的架构已成主流,而使用SpringBoot构建Web应用是非常快速的,项目发布到服务器上的时候,只需要打成一个jar包......
  • 25Jmeter之服务器性能资源监测-Jconsole &Linux命令
    一.通过Jconsole进行监控服务器资源情况Jconsole是一个内置Java性能分析器,可以轻松地使用JConsole来监控Java应用程序性能和跟踪Java中的代码。(1)开始—运行—输......
  • 23Jmeter之服务器性能资源监测-Jmeter插件
    如何监控服务器CPU、内存、磁盘、网络等相关资源?需要下载三个文件,其中JMeterPlugins-Standard和JMeterPlugins-Extras是客户端的,ServerAgent是服务端的。前两个的下载地址......
  • 24Jmeter之服务器性能资源监测-nmon
    通过nmon进行监控服务器资源情况1.认识nmon(1)简介nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,记......
  • web服务器12 中间件函数
    //1,导入expressconstexpress=require('express')constapp=express()//3定义一个中间件//constmw=(req,res,next)=>{//console.log('中间件');//......
  • 游戏服务器架构:如何避免缓存积累延迟
    不管使用TCP还是KCP,你都不可能超越信道限制的发送数据。TCP的发送窗口SNDBUF决定了最多可以同时发送多少数据,KCP的也一样。当前发送且没有得到ACK/UNA确认的数据,都会......
  • 游戏服务器架构:经典的全服分线模型概述
    全服分线模型一.模型描述由于多进程服务器模型的发展,游戏开发者们首先发现,由于游戏业务的特点,那些需要持久化的数据,一般都是玩家的存档,以及一些游戏本身需要用的,在运行期只......
  • 游戏服务器架构:有状态和无状态服务器
    简介对服务器程序来说,究竟是有状态服务,还是无状态服务,其判断依旧——两个来自相同发起者的请求在服务器端是否具备上下文关系。状态化请求,服务器端一般都要保存请求的相关信......
  • 游戏服务器架构:使用KCP 加速游戏消息,让全球玩家流畅联网
    定义      kcp协议是传输层的一个具有可靠性的传输层ARQ协议。     它的设计是为了解决在网络拥堵情况下tcp协议的网络速度慢的问题。     ......