日萌社
人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新)
搜索引擎:Elasticsearch、Solr、Lucene
- ELK中的ES:Elasticsearch
- SolrCloud 的搭建、使用
- Solr 高亮显示
- Spring Data Solr 使用
- Solr的安装与配置
- Solr 原理、API 使用
- Lucene 原理、API使用
- Lucene 得分算法
Solr的安装与配置(linux版本)
1.Centos安装jdk:
1.在/usr/local目录下创建java文件夹:cd /usr/local
mkdir java
2.把64位的JDK(jdk-7u75-linux-x64.tar.gz)解压到 /usr/local/java目录下
指定解压到/usr/local/java目录下的命令:tar zxvf jdk-7u75-linux-x64.tar.gz -C /usr/local/java
3.可以查看JDK版本号:注意如果是linux位数和JDK位数不一致的话,是无法执行java的命令的。
(1)cd /usr/local/java/jdk1.7.0_75/bin/
(2)./java -version
(3)在profile配置文件中配置好新的JDK之后,便可以直接使用“java -version”查看JDK版本号
4.查看CentOS已安装的自带openjdk,并卸载CentOS自带的该openjdk:
(1)查看CentOS已安装的所有软件库:rpm -qa
(2)查看CentOS已安装的自带openjdk:rpm -qa | grep java
查看出CentOS已安装的自带的两个openjdk:
java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64
java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.x86_64
(3)卸载上述两个CentOS已安装的自带的两个openjdk:
rpm -e java-1.6.0-openjdk-1.6.0.35-1.13.7.1.el6_6.x86_64
rpm -e java-1.7.0-openjdk-1.7.0.79-2.5.5.4.el6.x86_64
(4)检查是否卸载成功:rpm -qa | grep java
5.配置/etc目录下的profile配置文件:
(1)选中/etc/profile文件,右键open with default text editor
(2)在文件末尾添加以下内容:
#set java environment
JAVA_HOME=/usr/local/java/jdk1.7.0_75
CLASSPATH=.:$JAVA_HOME/lib/tools.jar
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME CLASSPATH PATH
(3)重新加载profile配置文件,让配置文件生效:source /etc/profile
(4)检查是否已配置好新的JDK:java -version
2.Centos安装tomcat:
1.在/usr/local目录下创建tomcat文件夹
2.把tomcat(apache-tomcat-7.0.57.tar.gz)解压到 /usr/local/tomcat目录文件夹下
指定解压到/usr/local/tomcat目录下的命令:tar zxvf apache-tomcat-7.0.57.tar.gz -C /usr/local/tomcat
3.修改Tomcat的配置文件,解决GET请求提交的表单数据的乱码问题:(Tomcat7中没有配置好,Tomcat8中已配置好)
修改server.xml配置文件中的编码格式(这种方式只支持get方式的请求);
在server.xml文件中的修改端口的元素<Connector>中增加URIEncoding=“UTF-8”;
设置编码/解码时都要使用该指定的字符编码;
通过配置URIEncoding=“UTF-8”,便可以实现支持GET请求的URL中识别中文字符,
那么如果通过URL(IP:端口/中文文件名的文件)GET请求 下载中文文件名的文件的话,
那么tomcat才能支持GET请求URL中识别中文字符并准确下载文件
4.进入到tomcat的bin目录下:cd /usr/local/tomcat/apache-tomcat-7.0.57/bin/
5.开启服务器:./startup.sh
6.并且将8080端口添加到防火墙,直接执行下面两行:
/sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
/etc/rc.d/init.d/iptables save
3.Centos安装solr:
1.解压solr:tar zxvf solr-4.10.3.tgz.tgz
2.把解压后的Solr目录下的dist文件夹中的“solr-版本号.war”拷贝到 Tomcat目录下的 webapps文件夹中:
cp solr-4.10.3/dist/solr-4.10.3.war apache-tomcat-7.0.52/webapps/
3.去到Tomcat的bin目录下:cd /root/apache-tomcat-7.0.52/bin
4.启动Tomcat之后,便会自动解压webapps目录下的war包:./startup.sh
5.关闭Tomcat:./shutdown.sh
6.把解压后的Solr目录下example/lib/ext文件夹下的所有的jar包 拷贝到 Tomcat目录下的 webapps/solr项目/WEB-INF/lib目录下:
cd /root/solr-4.10.3/example/lib/ext
cp -r ./ /root/apache-tomcat-7.0.52/webapps/solr-4.10.3/WEB-INF/lib
7.把/solr-4.10.3/example下的solr文件夹 拷贝到 /root路径下,并把solr文件夹改名为solrhome
cp -r /root/solr-4.10.3/example/solr /root
mv solr solrhome
8.去到该目录下修改web.xml,添加solrhome的绝对路径:
cd /root/apache-tomcat-7.0.52/webapps/solr-4.10.3/WEB-INF
9.去到Tomcat的bin目录下启动Tomcat:
cd /root/apache-tomcat-7.0.52/bin
./startup.sh
10.访问solr:
http://192.168.25.133:8080/solr项目名
比如:http://192.168.25.133:8080/solr-4.10.3
11.如果Tomcat出问题了的话,无法启动或无法访问项目的话,注意查看Toncat的日志文件catalina.out:
cd /root/apache-tomcat-7.0.52/logs
cat catalina.out
Solr的安装与配置(window版本)
1.安装 Tomcat,解压缩即可
2.解压solr
3.把解压后的Solr目录下的dist文件夹中的“solr-版本号.war”拷贝到 Tomcat目录下的 webapps文件夹中
4.启动Tomcat:执行startup.bat,即会自动解压webapps文件夹中的war包,
此处便会把“solr-版本号.war”进行自动解压。
5.把解压后的Solr目录下example/lib/ext文件夹下的所有的jar包 拷贝到 Tomcat目录下的 webapps/solr项目/WEB-INF/lib目录下
6.把解压后的Solr目录下example文件夹下中的solr 拷贝到 比如D盘的根目录下,并solr文件夹名修改名字为solrhome,该solrhome用于保存多个数据库
7.Tomcat目录下的 webapps/solr项目/WEB-INF目录中的web.xml中进行配置solrhome的绝对路径
不使用 中文分析器IKAnalyzer 时 对中文进行分词结果:缺点是每个中文字符都被作为单个分词
使用 中文分析器IKAnalyzer 对中文进行分词(linux版本)
1.把 IKAnalyzer2012FF_u1.jar 拷贝到 /root/apache-tomcat-7.0.52/webapps/solr-4.10.3/WEB-INF/lib 目录下
2.在WEB-INF目录下 创建classes文件夹,把 ext_stopword.dic、IKAnalyzer.cfg.xml、mydict.dic 拷贝到
/root/apache-tomcat-7.0.52/webapps/solr-4.10.3/WEB-INF/classes 目录下
1./WEB-INF/classes:实际就是 classpath目录
2.ext_stopword.dic:停用词词典
3.mydict.dic:拓展词典
4.IKAnalyzer.cfg.xml:可配置 停用词词典ext_stopword.dic 和 拓展词典mydict.dic
3.在/root/solrhome/collection1/conf/ 目录下的 schema.xml:配置一个 FieldType,使用 中文分析器IKAnalyzer
1.collection1:solrhome目录下的 其中一个数据库
2.配置一个 FieldType,使用 中文分析器IKAnalyzer:
<fieldType name="text_ik" class="solr.TextField">
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
4.重启Tomcat后再访问192.168.25.133:8080/solr-4.10.3
因为设置了字段类型“text_ik”使用上了中文分析器IK对中文进行分词,
所以此处指定“所要进行分词的内容”对应存储在“text_ik”字段中,
即可根据中文分析器IK对中文进行分词。
使用 中文分析器IKAnalyzer 对中文进行分词(window版本)
因为设置了字段类型“text_ik”使用上了中文分析器IK对中文进行分词,
所以此处指定“所要进行分词的内容”对应存储在“text_ik”字段中,
即可根据中文分析器IK对中文进行分词。
配置域:自定义域、复制域、动态域
1.域相当于数据库的表字段,用户存放数据,因此用户根据业务需要去定义相关的Field(域)。
一般来说,每一种域对应着一种数据,用户对同一种数据进行相同的操作。
2.域的常用属性:
name:指定域的名称(字段的名称)
type:指定域的类型(字段的类型)
indexed:是否建立索引进行搜索
stored:是否进行存储
required:是否必须
multiValued:是否多值
自定义域(自定义字段)
1.修改solrhome的schema.xml 文件,设置品优购中的域(Field字段):
<field name="item_goodsid" type="long" indexed="true" stored="true"/>
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="double" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />
2.type="text_ik":字段类型“text_ik”使用上了中文分析器IK对中文进行分词
3.indexed="false":设置了不对"item_image"进行建立索引,即无需对"item_image"字段值进行建立索引进行搜索
复制域
1.复制域字段<field name="复制域字段名" /> & <copyField source="被映射并实际被赋值的字段名" dest="复制域字段名"/> 组合用法:
solr_home\collection1\conf\schema.xml中可定义如下组合用法的复制域字段:
//定义多个用于“被复制域字段所映射并被赋值的”字段,即赋值给复制域字段时,
//实际上会把复制域字段的值赋值“给所映射的多个”目标字段
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_category" type="string" indexed="true" stored="true" />
<field name="item_seller" type="text_ik" indexed="true" stored="true" />
<field name="item_brand" type="string" indexed="true" stored="true" />
//定义复制域字段<field name="复制域字段名" type="类型" indexed="true" stored="false" multiValued="true"/>
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
//复制域字段所映射的多个目标字段,即把复制域字段和多个目标字段关联映射起来
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_category" dest="item_keywords"/>
<copyField source="item_seller" dest="item_keywords"/>
<copyField source="item_brand" dest="item_keywords"/>
2.复制域字段<field name="复制域字段名" type="类型" indexed="true" stored="false" multiValued="true"/>:
1.type="text_ik" :表示该字段设置了中文分析器IKAnalyzer,那么当该字段便支持中文分词
2.indexed="true" :复制域字段需要建立索引进行快速查询
3.stored="false" :给复制域字段赋值时,复制域字段并不会把值存储到本地数据库中,而是同时会把值最终赋给所映射的多个目标字段
4.multiValued="true":当复制域字段需要映射的多个目标字段时,即复制域字段需要和多个目标字段关联映射的话,那么便要设置为“多值”
3.<copyField source="被映射并实际被赋值的字段名" dest="复制域字段名"/>:
该<copyField/>的作用是 用于复制域字段 关联映射 多个目标字段,那么当赋值给复制域字段时,
实际上是把值赋值给“复制域字段所关联映射的”多个目标字段。
3.复制域字段的作用:
当我们需要多个字段同时都对同一个值进行搜索查询时,那么只需要定义一个复制域字段,然后让该复制域字段映射多个目标字段,
然后我们只需要对复制域字段进行赋值时,实际是把值同时最终赋值给多个所映射的多个目标字段,
那么便可以达到多个字段同时都对同一个值进行搜索查询的效果。
动态域
1.spec字段值:JSON对象的字符串
2.动态域(动态字段):
1.第一步:把 spec字段值(JSON对象的字符串) 转换为 Map集合:Map集合 = JSON.parseObject(JSON对象, Map.class)
2.第二步:把该Map集合 赋值给 动态域字段("item_spec_*") 对应的 Map<String, String> specMap
3.第三步:动态域字段("item_spec_*") 会拼接上 Map集合中的key 作为 新的域(字段),
Map集合中的value则作为该新的域(字段)的值。