搜索引擎
ElasticSearch
安装
Centos
#java环境
yum install java -y
#java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)
OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
# 配置账户(出于安全考虑,elasticsearch不允许在root用户下运行)
groupadd elasticsearch
useradd -s /bin/bash -g elasticsearch elasticsearch
vim /etc/sudoers
# 在root下添加
elasticsearch ALL=(ALL) ALL
# 如果不想每次sudo都输密码可以用
elasticsearch ALL=(ALL) NOPASSWD: ALL
passwd elasticsearch xxxxx 修改密码
# 如果以前安装过,清理旧的残留文件
yum remove elasticsearch -y
rm -rf /var/lib/elasticsearch*
#安装Elasticsearch
# 有很多版本,目前最新是6.5.4(安装IK插件可能会提示权限问题),对应修改版本号就行。
# 切换到普通用户,重要!!!
su elasticsearch
cd ~
version=6.2.4
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-$version.rpm
sudo yum localinstall elasticsearch-$version.rpm -y
rm -rf elasticsearch-$version.rpm
# 配置地址、端口
vim /etc/elasticsearch/elasticsearch.yml
cluster.name: "cluster01" #集群名,单机随便取,集群每个节点都要统一
network.host: 0.0.0.0
http.port: 9200
http.cors.enabled: true # 开启跨域访问支持,默认为false
http.cors.allow-origin: "*" # 跨域访问允许的域名地址,(允许所有域名)使用正则
# 如果是7.X版本,必须添加以下几行
action.auto_create_index: .monitoring*,.watches,.triggered_watches,.watcher-history*,.ml*
node.name: node-1
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["node-1"]
# 启动
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
注意:如果安装步骤没问题,启动不了,也没报明显错误,重启一下服务器才能启动
#测试是否正常运行
curl http://localhost:9200/
# 后续优化可以配置内存锁、插件等
参考资料:https://www.cnblogs.com/wintersoft/p/10635284.html
Ubuntu
# 登录系统,默认普通用户
sudo apt-get update
sudo apt-get install default-jre
#java -version
openjdk version "1.8.0_171"
OpenJDK Runtime Environment (build 1.8.0_171-8u171-b11-0ubuntu0.16.04.1-b11)
OpenJDK 64-Bit Server VM (build 25.171-b11, mixed mode)
# 这里安装的是6.X的ES,使用apt源,要自己指定版本比较麻烦,可以参考Centos的方法。
cd ~
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
sudo apt-get update
sudo apt-get install elasticsearch
插件、优化
**注意:**安装插件必须要在ES正常运行的情况下,没有启动ES无法安装插件;报错时仔细看信息是连接错误(网络问题、插件找不到)、安装错误。
中文分词、拼音插件
# 版本要和elasticsearch的版本对应
目前我测试过的版本有这些:6.2.4、6.3.2、6.5.4、7.1.0
# 还是要切换到普通用户,且用sudo执行
su elasticsearch
version=6.2.4
# 中文分词插件
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v$version/elasticsearch-analysis-ik-$version.zip
# 拼音插件
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-pinyin/releases/download/v$version/elasticsearch-analysis-pinyin-$version.zip
安装完成后重启elasticsearch即可加载插件
sudo systemctl restart elasticsearch
Kibana
ES6.3.2以下版本Kibana和X-Pack插件是独立的,可以只安装X-Pack用于身份认证;Kibana和ES在同一台机器可以开启X-Pack认证或者不开启都可以使用。
建议真机安装Kibana;浏览器安装head插件。
版本要与elasticsearch一一对应(否则无法连接elasticsearch)
Kibana 是为Elasticsearch设计的开源分析和可视化平台,你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互。你可以很容易实现高级的数据分析和可视化,以图表的形式展现出来。
# Centos
# 下载地址:https://www.elastic.co/downloads/kibana
sudo elasticsearch
version=6.2.4
wget https://artifacts.elastic.co/downloads/kibana/kibana-$version-x86_64.rpm
sudo yum install -y kibana-$version-x86_64.rpm
rm -f kibana-$version-x86_64.rpm
# Ubuntu
sudo apt-get install kibana
# 修改配置文件
sudo vim /etc/kibana/kibana.yml
server.port: 5601 #监听端口
server.host: "0.0.0.0" #监听IP地址。
elasticsearch.url: "http://127.0.0.1:9200" #kibana连接elasticsearch的URL,集群内任一个IP都行(一般填写master或者client的IP)
# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable kibana
sudo systemctl start kibana
sudo ss -antlup | grep 5601
浏览器打开ip:5601访问
安装X-Pack(身份认证)
注意:如果是Elasticsearch 6.3.2 或更新的版本,已经集成了X-Pack,只需要简单改动就可以。
Elasticsearch 6.3.2 或更新的版本
在 Kibana 中访问 Management -> Elasticsearch -> License Management,点击右侧的升级 License 按钮,可以免费试用 30 天的高级 License,升级完成之后页面会显示如下:
另外还可以使用 API 来更新 License,详情可以参考官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.2/update-license.html。
sudo vim /etc/elasticsearch/elasticsearch.yml
# 开启 Auth 认证功能:
xpack.security.enabled: true
#设置 elastic、kibana、logstash_system 三个用户的密码
sudo /usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
#运行之后会依次提示设置这三个用户的密码并确认,一共需要输入六次密码,完成之后就成功设置好了密码了。
#重启 Elasticsearch 和 Kibana 服务:
sudo systemctl restart elasticsearch
sudo systemctl restart kibana
另外修改权限认证之后,Elasticsearch也必须输入用户密码才可以访问和调用其 API,保证了安全性。
Elasticsearch 6.3.2以下低版本
# 在Elasticsearch中安装X-pack
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack
#在Kibana中也安装x-pack
sudo /usr/share/kibana/bin/kibana-plugin install x-pack
# 设置密码
sudo systemctl restart elasticsearch #重启elasticsearch
sudo /usr/share/elasticsearch/bin/x-pack/setup-passwords interactive
#运行之后会依次提示设置这三个用户的密码并确认,一共需要输入六次密码,完成之后就成功设置好了密码了。
用户名:elastic,kibana,logstash_system 密码:你设置的
# 修改配置
sudo vim /etc/elasticsearch/elasticsearch.yml
#action.auto_create_index : .security,.monitoring*,.watches,.triggered_watches,.watcher-history*
xpack.security.enabled : true
xpack.monitoring.enabled : true
xpack.graph.enabled : false
xpack.watcher.enabled : false
xpack.ml.enabled : false
sudo vim /etc/kibana/kibana.yml
elasticsearch.url: "http://127.0.0.1:9200" #这里是不变的啊,还是连接的本地。
elasticsearch.username: "elastic" #这是内置的特权用户
elasticsearch.password: "your_password" #这是我们用bin/x-pack/setup-passwords interactive更改后的密码
sudo systemctl restart elasticsearch
sudo systemctl restart kibana
最后终于可以登录了。
首次打开,需要添加索引模式
Management(管理)\-->Index Patterns(索引模式)\-->Create index pattern(创建索引模式)
填写*(索引名)\-->Next step-->选择如:\@timestamp\-->Create index pattern ,完成
Index pattern 下面填写logstash配置的名称如type => "logs"填写logs
参考:https://blog.csdn.net/qq_21383435/article/details/79312247
head插件(集群管理插件)
建议真机安装Kibana;浏览器安装head插件。连接集群要等待几秒才能连接上!
浏览器插件(推荐)
打开chrome的插件中心,拖进去安装。
https://image.leolan.top/elasticsearch5.x-head-chrome.zip
新版本Chrome安全机制变化,可以修改crx格式为zip,并解压;然后Chrome加载已解压的包即可安装。
真机安装head插件
使用root账户执行以下命令
sudo vim /etc/elasticsearch/elasticsearch.yml
# 增加参数,使head插件可以访问es
http.cors.enabled: true
http.cors.allow-origin: "*"
# Centos
yum install nodejs
# Ubuntu
apt install node
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip -d /data/
cd /data/elasticsearch-head-master
# 安装grunt
# grunt是基于Node.js的项目构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动
npm install -g grunt-cli
npm install
# 修改配置
vim Gruntfile.js
# 大约在93-95行可以改端口和控制访问,在port前加上以下代码
hostname: '*',
# 注意末尾","
vim _site/app.js #不改也没关系
# 大约在4354行,改一下localhost为ip,elasticsearch中只运行本地运行,不改也行,改这个可以自动连接elasticsearch。
# 运行服务,浏览器打开ip:9100访问
grunt server &
注意:如果ElasticSearch有设置密码,需要修改ElasticSearch配置文件
vim /etc/elasticsearch/elasticsearch.yml
# 加入以下三行,前两行有重复就不用加
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
# 使用elasticsearch或者root用户都可以启动,重点是用elasticsearch用户安装
sudo systemctl restart elasticsearch
# 浏览器访问
http://localhost:9100/?auth_user=elastic&auth_password=you_password
内存锁
系统默认会进行内存交换(swap分区),这样会导致 Elasticsearch 的性能变差。
# 查看状态
http://ip:port/_nodes?filter_path=**.mlockall
{
"nodes": {
"GIIszV-zSXehj4UEhNBFeQ": {
"process": {
"mlockall": false
}
}
}
}
这代表内存交换没有开启,会影响 Elasticsearch 的性能,所以我们需要开启内存物理地址锁定,每台主机需要修改
# 开启内存锁
vim /etc/elasticsearch/elasticsearch.yml
bootstrap.memory_lock: true
# 放开系统限制
vim /etc/security/limits.conf
* soft nofile 65536
* hard nofile 65536
* soft nproc 32000
* hard nproc 32000
* hard memlock unlimited
* soft memlock unlimited
vim /etc/systemd/system.conf
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
# 使用elasticsearch或者root用户都可以启动,重点是用elasticsearch用户安装
sudo systemctl restart elasticsearch
# 还是无法启动,报错:memory locking requested for elasticsearch process but memory is not locked
关闭交换分区
vim /etc/sysctl.conf
vm.swappiness=0
则需要重启系统,才能让配置生效,或者执行sysctl -p
Solr
Solr也有Docker版,但是貌似只是能运行,无法连接数据库,里面的配置还是要自己改。
Centos 7搭建Solr
安装Solr
要事先安装好JDK1.8
[root@solr ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
不用Tomcat,用Tomcat太麻烦了,开始安装,用root用户安装。
Solr下载:http://archive.apache.org/dist/lucene/solr
cd /root
wget https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/6.6.5/solr-6.6.5.tgz
tar zxvf solr-6.6.5.tgz
# 此时不要删除solr-6.6.5.tgz文件(还有用)
#创建安装目录,比如我安装在/data下,就建立安装目录solr(目录名自己定)
mkdir -p /data/solr
# 建立数据存放目录,软件安装目录
mkdir -p /data/solr/data
mkdir -p /data/solr/soft
# 安装需要用原来下载的压缩包
solr-6.6.5/bin/install_solr_service.sh solr-6.6.5.tgz -d /data/solr/data/ -i /data/solr/soft/
这里只指定了数据目录和安装目录(这两个建议指定,不指定会出现一些问题:solr重启core丢失的问题),要指定其他的加参数,安装完成后自动启动,服务也是自启的。
安装脚本必须用root才能安装。
- -d solr数据数据目录,比如存放logs,pid文件,core目录等等。默认在/var/solr
- -i solr程序安装目录,默认在/opt。安装目录必须先创建好。
- -p 执行solr绑定的端口,默认是8983端口。
- -s solr服务的名称,默认是solr(会创建对应名称的文件夹)。可以指定别的,比如 lcsolr
- -u solr服务运行或者solr文件拥有者的用户,默认是solr。也只可以指定别的,如果指定的不存在怎会先创建相关用户
- -n solr安装完毕之后不启动solr服务
此时浏览器打开IP:8983 就可以访问了,不要在网页中创建core,因为web界面创建Core,默认要求 installdir 和 datadir 要必须先存在,而且 要求 solrconfig.xml也必须能被找到,所以建议用命令创建core。
扩展jar文件目录在:**/data/solr/soft/solr-6.6.5/server/solr-webapp/webapp/WEB-INF/lib/**之后要安装扩展,把jar文件放在这里,重启solr即可加载。
重启用:systemctl restart solr
日志:/data/solr/data/logs/solr.log
创建core
不要用web界面去创建,没有指定基础目录会创建失败的。
passwd solr
#更改solr账户的密码,下一行用solr用户(普通用户,root用户无法创建的)创建一个名为TC的core,这里注意可执行文件的路径(在安装目录soft下)
su - solr -c '/data/solr/soft/solr/bin/solr create -c TC'
创建完成后就可以在在web界面中看到新建的core了。
脚本:在/root下创建,方便管理
vim /root/create_new_core.sh
#!/bin/bash
# 核心名
# core_name="XXXXXX"
read -p "请输入Core名,不要使用中文:" core_name
su - solr -c "/data/solr/soft/solr/bin/solr create -c $core_name"
echo "已成功创建 $core_name"
参考:http://blog.csdn.net/eagle5063/article/details/53889154
链接SQL Server
下载jdbc驱动包:http://msdn.microsoft.com/en-us/data/aa937724.aspx
官网这东西藏的很深,打开网址,滚动到下面,找到这一个链接。
最好下载英文版的,解压出来用jre8那个(因为本地安装的是JDK1.8)
wget https://download.microsoft.com/download/3/F/7/3F74A9B9-C5F0-43EA-A721-07DA590FD186/sqljdbc_6.2.0.0_enu.tar.gz
tar zxvf sqljdbc_6.2.0.0_enu.tar.gz
# 找到mssql-jdbc-6.2.0.jre8.jar移动到/data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib下
mv mssql-jdbc-6.2.0.jre8.jar /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
创建数据库链接配置,这个文件是新建的,默认的没有,根据自己的需要修改
vim /data/solr/data/data/TC/conf/data-config.xml
# 参考1 测试数据库:https://image.leolan.top/Mybookshop.rar
<?xml version="1.0" encoding="UTF8"?>
<dataConfig>
<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=MyBookShop" user="sa" password="123456"/>
<document name="Info" pk="id">
<entity name="zpxx" transformer="ClobTransformer" pk="id"
query="SELECT [ID],[Title] as name FROM [MyBookShop].[dbo].[Books]"
deltaImportQuery="SELECT [Id],[Title] as name FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'"
deltaQuery="SELECT id FROM [MyBookShop].[dbo].[Books] where [PublishDate] > '${dataimporter.last_index_time}'">
<field column="id" name="id" />
<field column="name" name="name" />
</entity>
</document>
</dataConfig>
#参考2
<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
<dataSource driver="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://192.168.0.199:1333;DatabaseName=HotelAgentSys"
user="sa"
password="123456"
/>
<document name="Info">
<entity name="Hotel" pk="HotelId"
query="select h.[HotelId],h.[Code],he.[Name],he.[Lang] from [HotelAgentSys].[dbo].[Hotel] h
left join [HotelAgentSys].[dbo].[Hotel_Ext] he
on h.[HotelId] = he.[HotelId]"
deltaImportQuery="select h.[HotelId],h.[Code],he.[Name],he.[Lang] from [HotelAgentSys].[dbo].[Hotel] h
left join [HotelAgentSys].[dbo].[Hotel_Ext] he
on h.[HotelId] = he.[HotelId]
where h.[HotelId] = '${dataimporter.delta.HotelId}'"
deltaQuery="select h.[HotelId],h.[Code],he.[Name],he.[Lang] from [HotelAgentSys].[dbo].[Hotel] h
left join [HotelAgentSys].[dbo].[Hotel_Ext] he
on h.[HotelId] = he.[HotelId]
where h.[ModifyTime] > '${dataimporter.last_index_time}' or he.[ModifyTime] > '${dataimporter.last_index_time}'">
<field column="HotelId" name="HotelId" />
<field column="Code" name="Code" />
<field column="Name" name="Name" />
<field column="Lang" name="Lang" />
</entity>
</document>
</dataConfig>
query是获取全部数据的SQL(solr从sql中获取那些数据),多列
deltaImportQuery是获取增量数据时使用的SQL(数据库新增数据追加到solr的数据),多列
deltaQuery是获取pk的SQL(数据库新增数据是,追加到solr的数据时的条件,根据id ,条件是最后一次获取的时间,${dataimporter.last_index_time,最后获取的时间}),一列
加载数据库配置文件
vim /data/solr/data/data/TC/conf/solrconfig.xml
#增加一段,引用配置文件
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">/data/solr/data/data/TC/conf/data-config.xml</str>
</lst>
</requestHandler>
#再增加一段,目录不确定可以搜索solr-dataimporthandler-*找到路径,也可""内的直接用绝对路径
<lib dir="${solr.install.dir:../../../..}/dist/" regex="solr-dataimporthandler-\d.*\.jar" />
OK,重启,系统(修改配置是systemctl restart solr就行,但是初次安装完成不重启系统solr服务是不能正常运行的)再次打开网页,数据库也连接上了。
Windows Server搭建Solr
参考:http://www.cnblogs.com/sunyj/p/6029193.html
http://blog.csdn.net/fwj380891124/article/details/41527171(Tomcat部分配置)
应用、索引操作
参考:http://www.cnblogs.com/madyina/p/4133908.html
http://blog.csdn.net/luwfls/article/details/59114974?utm_source=itdadao&utm_medium=referral
中文分词器
中文分词器用的比较多的是IK Analyzer和mmseg4j
IKAnalyzer分词器
旧版5.0版:IKAnalyzer-5.0.jar或者CSDN下载地址
google code:https://code.google.com/archive/p/ik-analyzer/downloads?page=1
推荐6.3版:ik-analyzer-solr-6.3.0.jar
这是经过修改的分词器,支持自定义字典,且每分钟刷新字典,修改字典后不需要重启solr。
原文:http://www.cnblogs.com/liang1101/articles/6395016.html
项目:https://github.com/liang68/ik-analyzer-solr6
编译过程(可跳过):配置好Maven环境参考:java jdk环境搭建,在本地克隆项目之后进入目录,运行mvn clean install
完成之后会生成ik-analyzer-solr-6.3.0.jar文件和IKAnalyzer.cfg.xml文件
参考:https://my.oschina.net/crxy/blog/412202
# jar都可以放在此目录,这个目录下的jar默认是加载的。
cd /data/solr/soft/solr-6.6.5/server/solr-webapp/webapp/WEB-INF/lib/
wget https://image.leolan.top/ik-analyzer-solr-6.3.0.jar
cd ~
参考:
https://www.cnblogs.com/johnwood/p/6673694.html?utm_source=itdadao&utm_medium=referral
http://www.cnblogs.com/madyina/p/4131751.html
配置分词器
编辑core目录下的managed-schema文件,加入字段
# 每个core的conf文件夹下
vim /data/solr/data/data/leo_test/conf/managed-schema
# 引用分词器,根据自己的业务修改
<field name="HotelId" type="string" indexed="true" stored="true" required="false" multiValued="false" />
<field name="Code" type="text_ik" indexed="true" stored="true" required="false" multiValued="false" />
<field name="Name" type="text_ik" indexed="true" stored="true" required="false" multiValued="false" />
<field name="Lang" type="string" indexed="true" stored="false" required="false" multiValued="false" />
# 定义分词器
# 这里加入了ik.conf文件,用于1分钟扫描一次词库是否有变化。原文:http://www.cnblogs.com/liang1101/articles/6395016.html
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="index">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf" />
<filter class="solr.StopFilterFactory" ignoreCase="false" words="stopwords.txt" />
</analyzer>
<!--查询时候的分词器-->
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query">
<tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf" />
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
</analyzer>
</fieldType>
<!--把英文单词拆开成一个一个字符的分词器-->
<fieldType name="text_letter" class="solr.TextField">
<analyzer type="index">
<tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.NGramTokenizerFactory"/>
</analyzer>
</fieldType>
配置字典
这是配置全局词库,只要在managed-schema文件空引用了ik分词器就可以使用这些词库;单独配置的话在单独的core中创建IKAnalyzer.cfg.xml文件和词库文件;这两个文件要在同一个目录,然后设置managed-schema引用。
mkdir /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes
cd /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes
vim IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 扩展配置</comment>
<!--用户可以在这里配置自己的扩展字典,多个字典用分号隔开 -->
<entry key="ext_dict">mydict.dic;</entry>
<!--用户可以在这里配置自己的扩展停止词字典-->
<entry key="ext_stopwords">stopword.dic;</entry>
</properties>
# 保存退出
# 新建词典mydict.dic和stopwords.dic一行一个词,直接用vim是没问题的
# 在win上记得用notepad++转换为UTF-8无BOM编码,换行符为Unix(LF)。有BOM的第一行留空也可以;不然是无法识别的。
chmod 755 ./*.dic
配置1分钟自动刷新词库
在需要引用的core目录下,且managed-schema中配置了引用ik.conf文件。
vim ik.conf
lastupdate=1
files=/data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/mydict.dic
程序通过扫描lastupdate的变化值来确定词库有无更新,是否需要重新加载,所以每次修改词库后就修改一下lastupdate的数字,比如加1
files后是词库路径,在core下的话可以直接写词库名,多个词库用;号隔开,修改ik.conf文件不用重启。
重启solr就生效了。
为了方便编辑字典,也可以链接到/root下
ln -s /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/mydict.dic /root/mydict.dic
ln -s /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/classes/stopwords.dic /root/stopwords.dic
ln -s /data/solr/data/data/XXXcore/conf/ik.conf /root/ik.conf
#全局词库一个ik.conf链接就行,刷新后所有配置的词库都会刷新
mmseg4j分词器
http://blog.csdn.net/robertohuang/article/details/60961353
https://github.com/chenlb/mmseg4j-solr
定时实时重建索引和增量更新
cp /data/solr/soft/solr-6.6.0/dist/solr-dataimporthandler-6.6.0.jar \
/data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
cp /data/solr/soft/solr-6.6.0/dist/solr-dataimporthandler-extras-6.6.0.jar \
/data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
# 自动更新的jar包,官方的太旧了,而且有错,这里用第三方博客中提供的附件。
# 这里有多个jar包,任选一个,我在测试时发现第一个jar会导致系统非常卡,第二个还行。
# 第一个jar包
wget https://image.leolan.top/apache-solr-dataimportscheduler-1.1.jar \
-p /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
# 第二个jar包
wget https://image.leolan.top/solr-dataimport-scheduler.jar \
-p /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/lib/
# 修改配置
vim /data/solr/soft/solr-6.6.0/server/solr-webapp/webapp/WEB-INF/web.xml
在servlet项前面增加:
<listener>
<listener-class>
org.apache.solr.handler.dataimport.scheduler.ApplicationListener
</listener-class>
</listener>
# 配置更新规则
# 在/solr_home/下新建conf文件夹(不是/solr_home/(创建的core)/)
mkdir /data/solr/data/data/conf
vim /data/solr/data/data/conf/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
syncCores=XXXSys_City,XXXSys_XXX,XXXSys_Place
# solr server name or IP address
# [defaults to localhost if empty]
server=localhost
# solr server port 端口
# [defaults to 80 if empty]
port=8983
# application name/context
# [defaults to current ServletContextListener's context (app) name]
webapp=solr
# URL params [mandatory]
# remainder of URL
#增量更新
#params=/select?qt=/dataimport&command=delta-import&clean=false&commit=true
params=/dataimport?command=delta-import&clean=false&commit=true&optimize=false&wt=json&indent=true&verbose=false&debug=false
# 下面这种多了参数entity=user
params=/dataimport?command=delta-import&clean=false&commit=true&optimize=false&wt=json&indent=true&entity=user&verbose=false&debug=false
# schedule interval 增量更新间隔时间
# number of minutes between two runs
# [defaults to 30 if empty]
interval=20
# 重做索引的参数(不想重做索引可以注释以下内容)
#reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true
reBuildIndexParams=/dataimport?command=full-import&clean=true&commit=true&optimize=true&wt=json&indent=true&entity=students&verbose=false&debug=false
# 重做索引的时间间隔,单位分钟,默认7200,即1天;
# 为空,为0,或者注释掉:表示永不重做索引
reBuildIndexInterval=7200
# 重做索引时间间隔的计时开始时间(第一次真正执行的时间=reBuildIndexBeginTime+reBuildIndexInterval*60*1000)
# 两种格式:2018-04-11 03:10:00 或者 03:10:00,后一种会自动补全日期部分为服务启动时的日期
reBuildIndexBeginTime=07:00:00
# 重启solr
systemctl restart solr
# 日志
tail -f /data/solr/data/logs/solr.log
参考:
https://blog.csdn.net/luvsnow/article/details/78678492
解决时区差8小时的问题
vim /etc/default/solr.in.sh
#SOLR_TIMEZONE="UTC"
改为:
SOLR_TIMEZONE="UTC+8"
性能优化JVM参数调优
修改Jvm-Memory值
Solr6后不要用-server -Xms1536m -Xmx1536m这样的参数了,会导致solr挂掉;直接修改配置值。
vim /data/solr/soft/solr-6.6.0/bin/solr
# 修改Jvm-Memory值,搜索Xss,值从256修改为512
# 修改${SOLR_HEAP:-512m}为${SOLR_HEAP:-2048m} 这里主机内存是8G,设置2048(设置4096会导致系统异常变慢,原因未知。)
JAVA_MEM_OPTS=()
if [ -z "$SOLR_HEAP" ] && [ -n "$SOLR_JAVA_MEM" ]; then
JAVA_MEM_OPTS=($SOLR_JAVA_MEM)
else
SOLR_HEAP="${SOLR_HEAP:-2048m}"
JAVA_MEM_OPTS=("-Xms$SOLR_HEAP" "-Xmx$SOLR_HEAP")
fi
# Pick default for Java thread stack size, and then add to SOLR_OPTS
if [ -z ${SOLR_JAVA_STACK_SIZE+x} ]; then
SOLR_JAVA_STACK_SIZE='-Xss512k'
fi
SOLR_OPTS+=($SOLR_JAVA_STACK_SIZE)
调整优化参数
# 可以改为一下参数;具体参数看参考链接
# define default GC_TUNE
if [ -z ${GC_TUNE+x} ]; then
GC_TUNE=('-XX:NewRatio=3' \
'-XX:SurvivorRatio=65535' \
'-XX:TargetSurvivorRatio=90' \
'-XX:MaxTenuringThreshold=0' \
'-XX:+UseConcMarkSweepGC' \
'-XX:+UseParNewGC' \
'-XX:ConcGCThreads=4' \
'-XX:ParallelGCThreads=4' \
'-XX:+CMSScavengeBeforeRemark' \
'-XX:PretenureSizeThreshold=64m' \
'-XX:+UseCMSInitiatingOccupancyOnly' \
'-XX:CMSInitiatingOccupancyFraction=90' \
'-XX:CMSMaxAbortablePrecleanTime=6000' \
'-XX:-CMSParallelRemarkEnabled' \
'-XX:+ParallelRefProcEnabled' \
'-XX:PermSize=256M' \
'-XX:MaxPermSize=256M' \
'-Xnoclassgc' \
'-XX:+DisableExplicitGC' \
'-XX:+UseCMSCompactAtFullCollection' \
'-XX:CMSFullGCsBeforeCompaction=0' \
'-XX:+CMSClassUnloadingEnabled' \
'-XX:SoftRefLRUPolicyMSPerMB=0' \
'-XX:+PrintClassHistogram' \
'-XX:+PrintGCDetails' \
'-XX:+PrintGCTimeStamps' \
'-XX:+PrintHeapAtGC' \
'-Xloggc:/data/solr/data/logs/gc.log' \
'-XX:-OmitStackTraceInFastThrow')
# '-XX:-CMSParallelRemarkEnabled 参数可以改为试试+CMSParallelRemarkEnabled;
参考:
https://blog.csdn.net/liangpz521/article/details/39081089
https://www.cnblogs.com/ggjucheng/p/3977612.html
参考:
https://blog.csdn.net/sinat_21184471/article/details/77193462
https://www.jianshu.com/p/7a95f5d90cfa
https://blog.csdn.net/zwx19921215/article/details/43152307
https://blog.csdn.net/yxue1118/article/details/51800145
xunsearch(迅搜)
Xunsearch 是免费开源的专业全文检索解决方案,旨在帮助一般开发者针对既有的海量数据,快速而方便地建立自己的全文搜索引擎。全文检索可以帮助您降低服务器搜索负荷、极大程度的提高搜索速度和用户体验。
http://www.xunsearch.com
评论区