Solr搜索引擎 — 两种安装方式

Stella981
• 阅读 628

Solr搜索引擎 — 两种安装方式

常常在业务开发中会遇到大列表的查询需求或者按照各项条件搜索内容,一般的做法往往都是数据库直接搞定,但是到了一定的程度只有这类需求会带来巨大的开销,一个表格中涉及到了5张表的数据,搜索要求从其中3张表的不同字段做到模糊查询,如果还用传统的方式实现起来就很有难度了逻辑和数据库性能就是一个考验,要是如果在A表一个字段是很长的text需要模糊匹配,在B表需要用简拼音搜索,那就难上加难了,solr恰巧就解决了这些问题。

附上:

喵了个咪的博客:http://w-blog.cn

Solr官网:http://lucene.apache.org/solr/

PS:8.0.0版本已经发布,本文使用此时较为稳定的7.7.1版本

一,Solr对比Elasticsearch

一般要提到索引运用比较多的自然是ES,有着良好的性能,

Sola特点:

  • 通过zookeeper进行集群管理
  • 支持丰富的数据源,可以直接使用mysql作为数据源
  • 和hadoop生态结合较好,可以索引文件直接落入hdfs可以实现无限扩容
  • 自带查询功能强大,新手都能很容易上手

Elasticsearch特点:

  • 效率快,自带一些图表分析的功能
  • restful的查询方式
  • 可以通过Logstash来支持mysql数据源

Solr和Elasticsearch主要区别:

  • Solr原生支持mysql数据源,ES需要Logstash来扩展支持(虽然都是一家的产品)
  • Elasticsearch在数据量较多的情况下速度比Solr快
  • 数据源Solr支持的更好,ES只支持json数据源
  • 集群上SolrCloud比较ES简单
  • 分词上都支持中文和拼音分词
  • Solr webUI更方便观察服务运行情况和调试索引

二、环境准备和solr启动

安装tomcat和jdk1.8

> wget -c http://mirrors.linuxeye.com/oneinstack-full.tar.gz && tar xzf oneinstack-full.tar.gz && ./oneinstack/install.sh --tomcat_option 2 --jdk_option 2 --reboot 

下载solr配置好环境变量

> mkdir /app/install && cd /app/install
> wget http://mirrors.shu.edu.cn/apache/lucene/solr/7.7.1/solr-7.7.1.tgz
> tar -zxvf solr-7.7.1.tgz
> mv solr-7.7.1 /usr/local/
> vim /etc/profile

export PATH=/usr/local/solr-7.7.1/bin:$PATH

> source /etc/profile

启动solr

> solr start

WARNING: Starting Solr as the root user is a security risk and not considered best practice. Exiting.
         Please consult the Reference Guide. To override this check, start with argument '-force'

> solr start -force

Waiting up to 180 seconds to see Solr running on port 8983 [\]  
Started Solr server on port 8983 (pid=8773). Happy searching!

PS:Solr自带jetty可以不依赖tomcat直接启动

通过访问8983端口就可以进入到webui Solr搜索引擎 — 两种安装方式

三、配置tomcat启动solr

虽然直接启动也可以,但是通过tomcat的方式更加可控为了后续的集群配置也更加推荐。

PS:通过oneinstack安装的tomcat的根目录在</data/wwwroot/default>下面

在tomcat包下的webapps目录新建一个目录,取名solr

> cd /data/wwwroot/default
> mkdir solr
  • 将solr解压包/solr-7.7.1/server/solr-webapp/webapp/下的内容拷贝到刚才tomcat下新建的文件夹solr中

  • 将/solr-7.7.1/server/lib/ext/下的jar包拷贝到/tomcat/webapps/solr/WEB-INF/lib/下

  • 将/solr-7.7.1/server/lib/下metrics开头的jar包也拷贝到刚才的目录下

  • 将/solr-7.7.1/dist/下 solr-dataimporthandler-extras-7.7.1.jar、solr-dataimporthandler-7.7.1.jar也拷贝到刚才的目录下

    cp -rf /usr/local/solr-7.7.1/server/solr-webapp/webapp/* /data/wwwroot/default/solr cp -rf /usr/local/solr-7.7.1/server/lib/ext/* /data/wwwroot/default/solr/WEB-INF/lib cp -rf /usr/local/solr-7.7.1/server/lib/metrics-* /data/wwwroot/default/solr/WEB-INF/lib cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-extras-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib cp -rf /usr/local/solr-7.7.1/dist/solr-dataimporthandler-7.7.1.jar /data/wwwroot/default/solr/WEB-INF/lib

  • 在你本地的/home下新建一个文件夹,取名solr-home,将/solr-7.7.1/server/solr下的内容拷贝到刚才新建的solr-home下

    mkdir /home/solr-home cp -rf /usr/local/solr-7.7.1/server/solr/* /home/solr-home/

  • 打开并编辑/tomcat/webapps/solr/WEB-INF/web.xml并且注释文件末尾的所有 元素节点

    vim /data/wwwroot/default/solr/WEB-INF/web.xml

    solr/home /home/solr-home java.lang.String

配置solr日志(可选) 将/solr-7.7.1/server/resources/下的log4j2.xml文件拷贝到solr/WEB-INF/classes/下,如果没有则自己创建一个。

分别给予权限

> chown -R www:www /home/solr-home/
> chown -R www:www /data/wwwroot/default/solr/

访问对应端口即可

http://172.16.2.75:8080/solr/index.html#/
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
2年前
java将前端的json数组字符串转换为列表
记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表。前端数据转化与请求varcontracts{id:'1',name:'yanggb合同1'},{id:'2',name:'yanggb合同2'},{id:'3',name:'yang
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Karen110 Karen110
2年前
​一篇文章总结一下Python库中关于时间的常见操作
前言本次来总结一下关于Python时间的相关操作,有一个有趣的问题。如果你的业务用不到时间相关的操作,你的业务基本上会一直用不到。但是如果你的业务一旦用到了时间操作,你就会发现,淦,到处都是时间操作。。。所以思来想去,还是总结一下吧,本次会采用类型注解方式。time包importtime时间戳从1970年1月1日00:00:00标准时区诞生到现在
Stella981 Stella981
2年前
GreenPlum tidb 性能比较
主要的需求  针对大体量表的OLAP统计查询,需要找到一个稳定,高性能的大数据数据库,具体使用  数据可以实时的写入和查询,并发的tps不是很高建立数据仓库,模式上主要采用星星模型、雪花模型,或者宽表前端展示分为3类 saiku、granafa、c代码开发数据体量:事实表在35亿、维度表大的在500
Easter79 Easter79
2年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
Oracle一张表中实现对一个字段不同值和总值的统计(多个count)
需求:统计WAIT\_ORDER表中的工单总数、未处理工单总数、已完成工单总数、未完成工单总数。表结构:为了举例子方便,WAIT\_ORDER表只有两个字段,分别是ID、STATUS,其中STATUS为工单的状态。1表示未处理,2表示已完成,3表示未完成总数。 SQL:  1.SELECT   2
Wesley13 Wesley13
2年前
ThinkPHP 根据关联数据查询 hasWhere 的使用实例
很多时候,模型关联后需要根据关联的模型做查询。场景:广告表(ad),广告类型表(ad\_type),现在需要筛选出广告类型表中id字段为1且广告表中status为1的列表先看关联的设置部分 publicfunctionadType(){return$thisbelongsTo('A
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究