1 1、使用Solr实现。 2 基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。 3 4 2、什么是Solr。 5 Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、 6 搜索性能进行了优化。 7 Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档, 8 Solr根据xml文档添加、删除、更新索引 。Solr搜索只需要发送 HTTP GET 请求,然后对 Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。 9 Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。 10 11 3、Solr与Lucene的区别。 12 Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的 13 工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。 14 Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜 15 索功能。
1、Solr的运行需要java环境(Solr是java开发实现的,Solr相当于是一个web的war工程,需要部署到容器里面,可以选择jetty或者tomcat),所以自己先安装jdk吧,这里安装的是jdk1.7.0_55。
需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器。
安装过程步骤大致如下所示:
代码语言:javascript复制1 [root@localhost package]# ls
2 apache-tomcat-7.0.47.tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10.3.tgz.tgz
3 [root@localhost package]# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/soft/
4 [root@localhost package]# vim /etc/profile
5 [root@localhost package]# source /etc/profile
6 [root@localhost package]# java
7 [root@localhost package]# javac
8 [root@localhost package]# java -version
2、将Solr的压缩包上传到服务器上面,solr-4.10.3.tgz.tgz,然后进行解压缩操作。
注意:Solr的目录介绍。
a、bin里面命令是启动solr的二进制命令,一般不适用此中方式启动,bin里面的命令会默认启动solr服务(使用的是jetty容器,jetty是一个servlet容器,直接启动bin/solr也可以启动,但是一般不适用)。
b、contrib是扩展包。
c、dist里面有solr的war包(solr-4.10.3.war),可以将solr部署到tomcat服务器中。solr-solrj-4.10.3.jar是solr的客户端。
d、docs是文档。
e、example是案例,example里面的solr可以作为solr home(solr的家,里面保存了solr服务所有的配置文件、solr库)。 你可以使用solr和jetty整合,也可以和tomcat整合,因为比较熟悉tomcat,所以这里整合tomcat。
[root@localhost package]# tar -zxvf solr-4.10.3.tgz.tgz -C /home/hadoop/soft/
代码语言:javascript复制 1 [root@localhost package]# ls
2 apache-tomcat-7.0.47.tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10.3.tgz.tgz
3 [root@localhost package]# tar -zxvf solr-4.10.3.tgz.tgz -C /home/hadoop/soft/
4 [root@localhost package]# ls
5 apache-tomcat-7.0.47.tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10.3.tgz.tgz
6 [root@localhost package]# cd ..
7 [root@localhost hadoop]# ls
8 package soft
9 [root@localhost hadoop]# cd soft/
10 [root@localhost soft]# ls
11 jdk1.7.0_55 solr-4.10.3
12 [root@localhost solr-4.10.3]# ls
13 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
14 [root@localhost solr-4.10.3]#
3、安装tomcat服务器。
[root@localhost package]# tar -zxvf apache-tomcat-7.0.47.tar.gz -C /home/hadoop/soft/
代码语言:javascript复制1 [root@localhost package]# ls
2 apache-tomcat-7.0.47.tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10.3.tgz.tgz
3 [root@localhost package]# tar -zxvf apache-tomcat-7.0.47.tar.gz -C /home/hadoop/soft/
然后将tomcat安装到/user/local目录里面:
代码语言:javascript复制1 [root@localhost soft]# mkdir /usr/local/solr
2 [root@localhost soft]# cp -r apache-tomcat-7.0.47/ /usr/local/solr/tomcat
3 [root@localhost soft]# cd /usr/local/solr/tomcat/
4 [root@localhost tomcat]# ls
5 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
6 [root@localhost tomcat]#
4、部署好tomcat以后,将war包部署到tomcat下面即可。然后进行解压缩solr操作,启动tomcat就可以完成solr的解压缩操作。
代码语言:javascript复制1 [root@localhost tomcat]# cp /home/hadoop/soft/solr-4.10.3/dist/solr-4.10.3.war /usr/local/solr/tomcat/webapps/
2 You have mail in /var/spool/mail/root
3 [root@localhost tomcat]# cd /usr/local/solr/tomcat/webapps/
4 [root@localhost webapps]# ls
5 docs examples host-manager manager ROOT solr-4.10.3.war
6 [root@localhost webapps]#
启动tomcat完成解压缩solr的war包。
代码语言:javascript复制 1 [root@localhost webapps]# cd /usr/local/solr/tomcat/
2 [root@localhost tomcat]# ls
3 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
4 [root@localhost tomcat]# bin/startup.sh
5 Using CATALINA_BASE: /usr/local/solr/tomcat
6 Using CATALINA_HOME: /usr/local/solr/tomcat
7 Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
8 Using JRE_HOME: /home/hadoop/soft/jdk1.7.0_55
9 Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
10 [root@localhost tomcat]# tail -f logs/catalina.out
11 Sep 01, 2019 5:16:20 AM org.apache.catalina.startup.HostConfig deployDirectory
12 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/manager
13 Sep 01, 2019 5:16:21 AM org.apache.catalina.startup.HostConfig deployDirectory
14 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/ROOT
15 Sep 01, 2019 5:16:21 AM org.apache.catalina.startup.HostConfig deployDirectory
16 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/examples
17 Sep 01, 2019 5:16:21 AM org.apache.catalina.startup.HostConfig deployDirectory
18 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
19 Sep 01, 2019 5:16:21 AM org.apache.catalina.startup.HostConfig deployDirectory
20 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
21 Sep 01, 2019 5:16:21 AM org.apache.coyote.AbstractProtocol start
22 INFO: Starting ProtocolHandler ["http-bio-8080"]
23 Sep 01, 2019 5:16:21 AM org.apache.coyote.AbstractProtocol start
24 INFO: Starting ProtocolHandler ["ajp-bio-8009"]
25 Sep 01, 2019 5:16:21 AM org.apache.catalina.startup.Catalina start
26 INFO: Server startup in 6031 ms
可以看到solr的war包已经解压缩了。
然后关闭solr,将一些jar包复制到solr里面。关闭tomcat,删除webapps里面的solr-4.10.3.war这个war 包,你可以将solr-4.10.3.war这个war包删除了或者留着也行。删除的话,一定要先关闭tomcat,然后进行删除war包操作。
代码语言:javascript复制1 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
2 [root@localhost tomcat]# bin/shutdown.sh
3 Using CATALINA_BASE: /usr/local/solr/tomcat
4 Using CATALINA_HOME: /usr/local/solr/tomcat
5 Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
6 Using JRE_HOME: /home/hadoop/soft/jdk1.7.0_55
7 Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
8 [root@localhost tomcat]#
复制一些日志相关的jar包加到solr里面。
代码语言:javascript复制 1 [root@localhost soft]# cd solr-4.10.3/
2 [root@localhost solr-4.10.3]# ls
3 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
4 [root@localhost solr-4.10.3]# clear
5 [root@localhost solr-4.10.3]# ls
6 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
7 [root@localhost solr-4.10.3]# cd example/
8 [root@localhost example]# ls
9 contexts etc example-DIH exampledocs example-schemaless lib logs multicore README.txt resources scripts solr solr-webapp start.jar webapps
10 [root@localhost example]# cd lib/
11 [root@localhost lib]# ls
12 ext jetty-http-8.1.10.v20130312.jar jetty-security-8.1.10.v20130312.jar jetty-util-8.1.10.v20130312.jar servlet-api-3.0.jar
13 jetty-continuation-8.1.10.v20130312.jar jetty-io-8.1.10.v20130312.jar jetty-server-8.1.10.v20130312.jar jetty-webapp-8.1.10.v20130312.jar
14 jetty-deploy-8.1.10.v20130312.jar jetty-jmx-8.1.10.v20130312.jar jetty-servlet-8.1.10.v20130312.jar jetty-xml-8.1.10.v20130312.jar
15 [root@localhost lib]# cd ext/
16 [root@localhost ext]# ls
17 jcl-over-slf4j-1.7.6.jar jul-to-slf4j-1.7.6.jar log4j-1.2.17.jar slf4j-api-1.7.6.jar slf4j-log4j12-1.7.6.jar
18 [root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/
19 [root@localhost ext]# cd /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/
20 [root@localhost lib]# ls
21 antlr-runtime-3.5.jar commons-lang-2.6.jar hppc-0.5.2.jar lucene-analyzers-common-4.10.3.jar lucene-join-4.10.3.jar org.restlet-2.1.1.jar wstx-asl-3.2.7.jar
22 asm-4.1.jar concurrentlinkedhashmap-lru-1.2.jar httpclient-4.3.1.jar lucene-analyzers-kuromoji-4.10.3.jar lucene-memory-4.10.3.jar org.restlet.ext.servlet-2.1.1.jar zookeeper-3.4.6.jar
23 asm-commons-4.1.jar dom4j-1.6.1.jar httpcore-4.3.jar lucene-analyzers-phonetic-4.10.3.jar lucene-misc-4.10.3.jar protobuf-java-2.5.0.jar
24 commons-cli-1.2.jar guava-14.0.1.jar httpmime-4.3.1.jar lucene-codecs-4.10.3.jar lucene-queries-4.10.3.jar slf4j-api-1.7.6.jar
25 commons-codec-1.9.jar hadoop-annotations-2.2.0.jar jcl-over-slf4j-1.7.6.jar lucene-core-4.10.3.jar lucene-queryparser-4.10.3.jar slf4j-log4j12-1.7.6.jar
26 commons-configuration-1.6.jar hadoop-auth-2.2.0.jar joda-time-2.2.jar lucene-expressions-4.10.3.jar lucene-spatial-4.10.3.jar solr-core-4.10.3.jar
27 commons-fileupload-1.2.1.jar hadoop-common-2.2.0.jar jul-to-slf4j-1.7.6.jar lucene-grouping-4.10.3.jar lucene-suggest-4.10.3.jar solr-solrj-4.10.3.jar
28 commons-io-2.3.jar hadoop-hdfs-2.2.0.jar log4j-1.2.17.jar lucene-highlighter-4.10.3.jar noggit-0.5.jar spatial4j-0.4.1.jar
29 [root@localhost lib]#
操作如下所示:
复制完jar包,开始配置solr home。
代码语言:javascript复制 1 [root@localhost solr-4.10.3]# cd /home/hadoop/soft/solr-4.10.3/
2 [root@localhost solr-4.10.3]# ls
3 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
4 [root@localhost solr-4.10.3]# clear
5 [root@localhost solr-4.10.3]# ls
6 bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
7 [root@localhost solr-4.10.3]# cd example/
8 [root@localhost example]# ls
9 contexts etc example-DIH exampledocs example-schemaless lib logs multicore README.txt resources scripts solr solr-webapp start.jar webapps
10 [root@localhost example]# cp -r solr /usr/local/solr/solrhome
11 [root@localhost example]# cd /usr/local/solr/solrhome/
12 [root@localhost solrhome]# ls
13 bin collection1 README.txt solr.xml zoo.cfg
14 [root@localhost solrhome]#
然后进行solr home的配置文件配置,solr也已经安装好了,solrhome也已经配置好了,然后将将solr和solrhome进行关联,建立关系,solr不知道solrhome在那里,那么
配置一下,告诉solr,solrhome在那里。操作方式有,可以修改tomcat的配置文件,或者去修改solr的web.xml,这种方式比较简单。建议使用。
代码语言:javascript复制1 [root@localhost ~]# ls
2 anaconda-ks.cfg Desktop Documents Downloads install.log install.log.syslog Music Pictures Public Templates Videos
3 [root@localhost ~]# cd /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/
4 [root@localhost WEB-INF]# ls
5 lib weblogic.xml web.xml
6 [root@localhost WEB-INF]# vim web.xml
配置方式如下所示:
代码语言:javascript复制1 <env-entry>
2 <env-entry-name>solr/home</env-entry-name>
3 <!-- <env-entry-value>/put/your/solr/home/here</env-entry-value> -->
4 <env-entry-value>/usr/local/solr/solrhome/</env-entry-value>
5 <env-entry-type>java.lang.String</env-entry-type>
6 </env-entry>
这样你的solr就已经配置好了,然后启动你的tomcat即可。
可以将solr的log4j.properties文件在Tomcat下webapps/solr/WEB-INF目录中创建文件classes文件夹, 复制Solr目录下/home/hadoop/soft/solr-4.10.3/example/resources至Tomcat下webapps/solr/WEB-INF/classes目录
代码语言:javascript复制 1 [root@localhost WEB-INF]# cd /usr/local/solr/tomcat/
2 [root@localhost tomcat]# ls
3 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
4 [root@localhost tomcat]# clear
5 [root@localhost tomcat]# bin/startup.sh
6 Using CATALINA_BASE: /usr/local/solr/tomcat
7 Using CATALINA_HOME: /usr/local/solr/tomcat
8 Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
9 Using JRE_HOME: /home/hadoop/soft/jdk1.7.0_55
10 Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
11 [root@localhost tomcat]# tail -f logs/catalina.out
12 Sep 03, 2019 5:32:27 AM org.apache.coyote.AbstractProtocol init
13 INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
14 Sep 03, 2019 5:32:27 AM org.apache.catalina.startup.Catalina load
15 INFO: Initialization processed in 1850 ms
16 Sep 03, 2019 5:32:28 AM org.apache.catalina.core.StandardService startInternal
17 INFO: Starting service Catalina
18 Sep 03, 2019 5:32:28 AM org.apache.catalina.core.StandardEngine startInternal
19 INFO: Starting Servlet Engine: Apache Tomcat/7.0.47
20 Sep 03, 2019 5:32:28 AM org.apache.catalina.startup.HostConfig deployWAR
21 INFO: Deploying web application archive /usr/local/solr/tomcat/webapps/solr-4.10.3.war
22 log4j:WARN No appenders could be found for logger (org.apache.solr.client.solrj.impl.HttpClientUtil).
23 log4j:WARN Please initialize the log4j system properly.
24 log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
25 Sep 03, 2019 5:32:41 AM org.apache.catalina.startup.HostConfig deployDirectory
26 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/manager
27 Sep 03, 2019 5:32:42 AM org.apache.catalina.startup.HostConfig deployDirectory
28 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/ROOT
29 Sep 03, 2019 5:32:42 AM org.apache.catalina.startup.HostConfig deployDirectory
30 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/examples
31 Sep 03, 2019 5:32:42 AM org.apache.catalina.startup.HostConfig deployDirectory
32 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
33 Sep 03, 2019 5:32:42 AM org.apache.catalina.startup.HostConfig deployDirectory
34 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
35 Sep 03, 2019 5:32:42 AM org.apache.coyote.AbstractProtocol start
36 INFO: Starting ProtocolHandler ["http-bio-8080"]
37 Sep 03, 2019 5:32:42 AM org.apache.coyote.AbstractProtocol start
38 INFO: Starting ProtocolHandler ["ajp-bio-8009"]
39 Sep 03, 2019 5:32:42 AM org.apache.catalina.startup.Catalina start
40 INFO: Server startup in 14797 ms
可以查看启动信息,然后启动完成了以后可以通过页面查看solr的信息:
注意:访问地址:http://192.168.110.142:8080/solr-4.10.3 其中8080是tomcat的端口号,然后solr-4.10.3是webapps下面的solr项目的名称,你可以修改为solr,这也访问比较方便些。
关于solr的collection,一个collection就是一个独立的索引库。不同的collection之前的索引库没有关系。
如何将mysql中的业务数据导入到solr里面呢?
首先判断出需要将哪些字段添加到solr里面,然后将这些字段加到索引库里面,solr里面有一个要求,添加一个文档的时候,这个文档必须有一个id,如果要添加文档,那么这些域必须在schema.xml里面定义好,避免随便添加其他字段的情况,在schema.xml里面定义的话,需要修改一下schema.xml的配置文件,在这里面定义我们自己的业务域,由于我们使用的是中文,所以要指定一个中文分析器,先将业务域定义好(判断好的哪些字段,定义业务域),然后向这里面导入数据就可以了,中文分析器要使用IK Analyzer 2012FF_hf1。
注意:IKAnalyzer2012FF_u1.jar这个是jar包。 ext_stopword.dic这个是提供词词典 IKAnalyzer.cfg.xml这个是配置文件 LICENSE.txt mydict.dic这个是扩展词词典 IKAnalyzer中文分词器V2012_FF使用手册.pdf
先将这个jar包加到自己的工程里面去。然后在schema.xml配置文件里面定义一个fieldType, 指定我们的分析器使用的是IK,然后定义域的时候指定使用的fieldType是我们自己定义好的fieldType。然后这个域就可以使用我们自己指定的中文分析器了。
首先将IK Analyzer 2012FF_hf1这个IK传到自己的服务器上面。
代码语言:javascript复制 1 [root@localhost package]# ll
2 total 292832
3 -rwxrw-rw-. 1 root root 8234674 Jul 27 22:27 apache-tomcat-7.0.47.tar.gz
4 drwxr-xr-x. 3 root root 4096 Sep 5 05:34 IK Analyzer 2012FF_hf1
5 -rw-r--r--. 1 root root 2142180 Sep 5 05:34 IK Analyzer 2012FF_hf1.rar
6 -rwxrw-rw-. 1 root root 139463702 Jul 27 22:35 jdk-7u55-linux-i586.tar.gz
7 -rwxrw-rw-. 1 root root 150010621 Jul 27 22:33 solr-4.10.3.tgz.tgz
8 [root@localhost package]# cd IK Analyzer 2012FF_hf1
9 [root@localhost IK Analyzer 2012FF_hf1]# ls
10 doc ext_stopword.dic IKAnalyzer2012FF_u1.jar IKAnalyzer.cfg.xml IKAnalyzer???ķִ???V2012_FFʹ???ֲ?.pdf LICENSE.txt mydict.dic NOTICE.txt
11 [root@localhost IK Analyzer 2012FF_hf1]# ll
12 total 2004
13 drwxr-xr-x. 5 root root 4096 Sep 5 05:34 doc
14 -rw-r--r--. 1 root root 168 Sep 5 05:34 ext_stopword.dic
15 -rw-r--r--. 1 root root 1165908 Sep 5 05:34 IKAnalyzer2012FF_u1.jar
16 -rw-r--r--. 1 root root 419 Sep 5 05:34 IKAnalyzer.cfg.xml
17 -rw-r--r--. 1 root root 841268 Sep 5 05:34 IKAnalyzer???ķִ???V2012_FFʹ???ֲ?.pdf
18 -rw-r--r--. 1 root root 17778 Sep 5 05:34 LICENSE.txt
19 -rw-r--r--. 1 root root 34 Sep 5 05:34 mydict.dic
20 -rw-r--r--. 1 root root 278 Sep 5 05:34 NOTICE.txt
21 [root@localhost IK Analyzer 2012FF_hf1]#
然后将IKAnalyzer2012FF_u1.jar这个jar包添加到solr里面。
代码语言:javascript复制1 [root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/
2 [root@localhost IK Analyzer 2012FF_hf1]# ll /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/IKAnalyzer2012FF_u1.jar
3 -rw-r--r--. 1 root root 1165908 Sep 5 05:39 /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/lib/IKAnalyzer2012FF_u1.jar
4 [root@localhost IK Analyzer 2012FF_hf1]#
然后将ext_stopword.dic这个是提供词词典,IKAnalyzer.cfg.xml这个是配置文件,mydict.dic这个是扩展词词典添加到classpath里面。对于这个solr项目的classpath相当于在WEB-INF下面的classes。
代码语言:javascript复制 1 total 16
2 drwxr-xr-x. 2 root root 4096 Sep 5 05:39 lib
3 -rw-r--r--. 1 root root 1210 Dec 1 2014 weblogic.xml
4 -rw-r--r--. 1 root root 7117 Sep 3 05:30 web.xml
5 [root@localhost IK Analyzer 2012FF_hf1]# mkdir /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/clases
6 [root@localhost IK Analyzer 2012FF_hf1]#
7 [root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/classes
8 [root@localhost IK Analyzer 2012FF_hf1]# ll /usr/local/solr/tomcat/webapps/solr-4.10.3/WEB-INF/classes
9 total 12
10 -rw-r--r--. 1 root root 168 Sep 5 05:44 ext_stopword.dic
11 -rw-r--r--. 1 root root 419 Sep 5 05:44 IKAnalyzer.cfg.xml
12 -rw-r--r--. 1 root root 34 Sep 5 05:44 mydict.dic
13 [root@localhost IK Analyzer 2012FF_hf1]#
然后,这个中文分析器就配置好了。然后呢,开始定义fieldType,然后指定我们使用这个中文分析器,在solrhome里面定义我们的fieldType。路径是这里,/usr/local/solr/solrhome/collection1/conf,然后这个conf里面两个配置文件,两个配置文件比较重要schema.xml和solrconfig.xml。solrconfig.xml这个配置文件,配置了solr服务的相关配置,schema.xml配置了所有使用到的业务域(业务域和业务域的类型)。
代码语言:javascript复制 1 [root@localhost ~]# cd /usr/local/solr/solrhome/
2 [root@localhost solrhome]# ls
3 bin collection1 README.txt solr.xml zoo.cfg
4 [root@localhost solrhome]# ll
5 total 20
6 drwxr-xr-x. 2 root root 4096 Sep 1 05:27 bin
7 drwxr-xr-x. 4 root root 4096 Sep 3 05:32 collection1
8 -rw-r--r--. 1 root root 2473 Sep 1 05:27 README.txt
9 -rw-r--r--. 1 root root 1715 Sep 1 05:27 solr.xml
10 -rw-r--r--. 1 root root 501 Sep 1 05:27 zoo.cfg
11 [root@localhost solrhome]# cd collection1/
12 [root@localhost collection1]# ls
13 conf core.properties data README.txt
14 [root@localhost collection1]# cd conf/
15 [root@localhost conf]# ls
16 admin-extra.html clustering lang protwords.txt _schema_analysis_synonyms_english.json solrconfig.xml synonyms.txt xslt
17 admin-extra.menu-bottom.html currency.xml mapping-FoldToASCII.txt _rest_managed.json schema.xml spellings.txt update-script.js
18 admin-extra.menu-top.html elevate.xml mapping-ISOLatin1Accent.txt _schema_analysis_stopwords_english.json scripts.conf stopwords.txt velocity
19 [root@localhost conf]# ll
20 total 292
21 -rw-r--r--. 1 root root 1068 Sep 1 05:27 admin-extra.html
22 -rw-r--r--. 1 root root 928 Sep 1 05:27 admin-extra.menu-bottom.html
23 -rw-r--r--. 1 root root 926 Sep 1 05:27 admin-extra.menu-top.html
24 drwxr-xr-x. 3 root root 4096 Sep 1 05:27 clustering
25 -rw-r--r--. 1 root root 3974 Sep 1 05:27 currency.xml
26 -rw-r--r--. 1 root root 1348 Sep 1 05:27 elevate.xml
27 drwxr-xr-x. 2 root root 4096 Sep 1 05:27 lang
28 -rw-r--r--. 1 root root 78514 Sep 1 05:27 mapping-FoldToASCII.txt
29 -rw-r--r--. 1 root root 2868 Sep 1 05:27 mapping-ISOLatin1Accent.txt
30 -rw-r--r--. 1 root root 873 Sep 1 05:27 protwords.txt
31 -rw-r--r--. 1 root root 33 Sep 1 05:27 _rest_managed.json
32 -rw-r--r--. 1 root root 450 Sep 1 05:27 _schema_analysis_stopwords_english.json
33 -rw-r--r--. 1 root root 172 Sep 1 05:27 _schema_analysis_synonyms_english.json
34 -rw-r--r--. 1 root root 60689 Sep 1 05:27 schema.xml
35 -rw-r--r--. 1 root root 921 Sep 1 05:27 scripts.conf
36 -rw-r--r--. 1 root root 74827 Sep 1 05:27 solrconfig.xml
37 -rw-r--r--. 1 root root 13 Sep 1 05:27 spellings.txt
38 -rw-r--r--. 1 root root 781 Sep 1 05:27 stopwords.txt
39 -rw-r--r--. 1 root root 1119 Sep 1 05:27 synonyms.txt
40 -rw-r--r--. 1 root root 1416 Sep 1 05:27 update-script.js
41 drwxr-xr-x. 2 root root 4096 Sep 1 05:27 velocity
42 drwxr-xr-x. 2 root root 4096 Sep 1 05:27 xslt
43 [root@localhost conf]#
然后开始配置schema.xml。路径是这里,/usr/local/solr/solrhome/collection1/conf,然后这个conf里面两个配置文件,两个配置文件比较重要schema.xml和solrconfig.xml。solrconfig.xml这个配置文件,配置了solr服务的相关配置,schema.xml配置了所有使用到的业务域。 定义一个fieldType可以指定一个分析的,然后这个fieldType的类型是solr.TextField,solr.TextField只有这种类型可以定义分析器。
开始配置业务域(业务域的定义),如下所示:
代码语言:javascript复制 1 <!-- IKAnalyzer-->
2 <!-- 域的定义和域的类型,然后就可以定义自己的业务域了 -->
3 <!-- 自定义分析器,name是自己的名称,不要重复-->
4 <!-- 定义自己的fieldType,然后指定了name为text_ik,类型是solr.TextField -->
5 <fieldType name="text_ik" class="solr.TextField">
6 <!--指定analyzer是IK analyzer-->
7 <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
8 </fieldType>
9
10 <!-- 定义自己的业务域 -->
11 <!-- 原本solr里面已经有了id,所以这个id可以不用定义了 -->
12 <!-- String类型是不分词的,但是建立索引的。Text类型是既分词也建立索引。 -->
13 <field name="item_title" type="text_ik" indexed="true" stored="true"/>
14 <field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
15 <field name="item_price" type="long" indexed="true" stored="true"/>
16 <field name="item_image" type="string" indexed="false" stored="true" />
17 <field name="item_category_name" type="string" indexed="true" stored="true" />
18 <field name="item_desc" type="text_ik" indexed="true" stored="false" />
19
20 <!-- item_keywords建立了几个复制域。复制域就是把某几个域都复制到这里面去,进行统一管理。然后这个域就包含了复制域的全部内容。将来搜索的时候只要搜索包含复制域的即可。 -->
21 <field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
22 <copyField source="item_title" dest="item_keywords"/>
23 <copyField source="item_sell_point" dest="item_keywords"/>
24 <copyField source="item_category_name" dest="item_keywords"/>
业务数据SQL编写。首先重启你的tomcat。配置好业务域,重启完了tomct,如何看自己的业务域是否好使呢。如下所示:
fieldType的分词效果,找到自定义分析器text_ik。
然后呢,测试item_title的分词效果。
如上效果,说明你的业务域就已经生效了。有了业务域,需要将数据从数据库导入到索引库中去。这里不推荐使用Dataimport进行数据导入的。
使用solrj可以将数据库的数据导入到索引库里面的。(注意:solr里面的更新操作就是新增,根据id查找到该数据,然后将它删除了,再添加一条新的数据)。
代码语言:javascript复制 1 package com.taotao.search.service;
2
3 import java.io.IOException;
4
5 import org.apache.solr.client.solrj.SolrServer;
6 import org.apache.solr.client.solrj.SolrServerException;
7 import org.apache.solr.client.solrj.impl.HttpSolrServer;
8 import org.apache.solr.common.SolrInputDocument;
9 import org.junit.Test;
10
11 /**
12 *
13 * @ClassName: TaoTaoSolrJ.java
14 * @author: biehl
15 * @since: 2019年9月7日 下午2:30:05
16 * @Copyright: ©2019 biehl 版权所有
17 * @version: 0.0.1
18 * @Description:
19 */
20 public class TaoTaoSolrJ {
21
22 @Test
23 public void taotaoSolrJ() {
24 try {
25 // 向solr里面添加文档
26 // 1、创建SolrServer对象。创建一个HttpSolrServer对象
27 SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
28 // 2、需要指定Solr服务的url
29 // 3、创建一个文档对象SolrInputDocument
30 SolrInputDocument document = new SolrInputDocument();
31 // 4、向文档中添加域,必须写id域,域的名称必须在schema.xml中定义
32 document.addField("id", "test002");
33 document.addField("item_title", "测试商品1");
34 document.addField("item_sell_point", "测试商品好的很");
35 document.addField("item_price", 1000);
36 document.addField("item_image", "testimg");
37 document.addField("item_category_name", "搞什么啊");
38 document.addField("item_desc", "你妹的");
39
40 // 5、把文档对象写入到索引库中
41 server.add(document);
42 // 6、提交
43 server.commit();
44 } catch (SolrServerException e) {
45 e.printStackTrace();
46 } catch (IOException e) {
47 e.printStackTrace();
48 }
49
50 }
51
52 @Test
53 public void taotaoSolrJDeleteById() {
54 try {
55 // 向solr里面添加文档
56 // 1、创建SolrServer对象。创建一个HttpSolrServer对象
57 SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
58
59 //2、 删除操作
60 server.deleteById("test001");
61
62 // 3、提交
63 server.commit();
64 } catch (SolrServerException e) {
65 e.printStackTrace();
66 } catch (IOException e) {
67 e.printStackTrace();
68 }
69
70 }
71
72 @Test
73 public void taotaoSolrJDeleteByQuery() {
74 try {
75 // 向solr里面添加文档
76 // 1、创建SolrServer对象。创建一个HttpSolrServer对象
77 SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
78
79 //2、 删除操作
80 server.deleteByQuery("id:test002");
81
82 // 3、提交
83 server.commit();
84 } catch (SolrServerException e) {
85 e.printStackTrace();
86 } catch (IOException e) {
87 e.printStackTrace();
88 }
89
90 }
91
92 }
点击Execute Query就可以进行查询操作了的。
删除以后如下所示:
查询solr的方法使用:
代码语言:javascript复制 1 package com.taotao.search.service;
2
3 import java.io.IOException;
4 import java.util.List;
5 import java.util.Map;
6
7 import org.apache.solr.client.solrj.SolrQuery;
8 import org.apache.solr.client.solrj.SolrServer;
9 import org.apache.solr.client.solrj.SolrServerException;
10 import org.apache.solr.client.solrj.impl.HttpSolrServer;
11 import org.apache.solr.client.solrj.response.QueryResponse;
12 import org.apache.solr.common.SolrDocument;
13 import org.apache.solr.common.SolrDocumentList;
14 import org.apache.solr.common.SolrInputDocument;
15 import org.junit.Test;
16
17 /**
18 *
19 * @ClassName: TaoTaoSolrJ.java
20 * @author: biehl
21 * @since: 2019年9月7日 下午2:30:05
22 * @Copyright: ©2019 biehl 版权所有
23 * @version: 0.0.1
24 * @Description:
25 */
26 public class TaoTaoSolrJ {
27
28
29 @Test
30 public void searchDocument() {
31 try {
32 // 1、创建一个SolrServer对象
33 SolrServer solrServer = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
34 // 2、创建一个SolrQuery对象
35 SolrQuery solrQuery = new SolrQuery();
36 // 3、设置查询条件,过滤条件,分页条件,排序条件,高亮
37 // key的q就是指查询条件。
38 // solrQuery.set("q", "*:*"); //等价于solrQuery.setQuery("*:*");
39 // 查询所有的不能指定高亮的。
40 // solrQuery.setQuery("*:*");// *:*是查询出所有的。
41 // 这里没有指定在那里域上面进行搜索,所以需要指定默认搜索域
42 solrQuery.setQuery("手机");
43 // 分页默认是0-10。分页条件。
44 solrQuery.setStart(0);// 起始数
45 solrQuery.setRows(20);// 查询出多少条
46 // 设置默认搜索域。
47 solrQuery.set("df", "item_keywords");
48 // 设置高亮。
49 solrQuery.setHighlight(true);// 开启高亮
50 // 设置高亮显示的域
51 solrQuery.addHighlightField("item_title");
52 // 设置高亮显示的前缀和后缀
53 solrQuery.setHighlightSimplePre("<em>");
54 solrQuery.setHighlightSimplePost("</em>");
55
56 // 4、执行查询,得到一个Response对象
57 QueryResponse response = solrServer.query(solrQuery);
58
59 // 5、取出查询结果总记录数
60 SolrDocumentList solrDocumentList = response.getResults();
61 // 查询出结果总记录数
62 System.out.println("查询结果总记录数: " solrDocumentList.getNumFound());
63
64 for (SolrDocument solrDocument : solrDocumentList) {
65 System.out.println("id : " solrDocument.get("id"));
66 // 取出高亮显示
67 Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
68 List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
69 String itemTitle = "";
70 if (list != null && list.size() > 0) {
71 itemTitle = list.get(0);
72 } else {
73 itemTitle = (String) solrDocument.get("item_title");
74 }
75 System.out.println(itemTitle);
76 // System.out.println("item_title : " solrDocument.get("item_title"));
77 System.out.println("item_price : " solrDocument.get("item_price"));
78 System.out.println("item_image : " solrDocument.get("item_image"));
79 System.out.println("item_category_name : " solrDocument.get("item_category_name"));
80 System.out.println("item_desc : " solrDocument.get("item_desc"));
81 System.out.println("=============================================");
82 }
83
84 } catch (SolrServerException e) {
85 e.printStackTrace();
86 }
87
88 }
89
90 }
效果如下所示:
2019-09-08 15:52:30
1、记录了Solr单机版第二种部署方案:
将solr的安装包传到机器上以后,进行解压缩操作。
[root@localhost package]# tar -zxvf solr-4.10.3.tgz.tar -C /home/hadoop/soft/
代码语言:javascript复制 1 [root@localhost soft]# ls
2 apache-tomcat-7.0.47 dubbo-admin-2.5.4.war jdk1.7.0_55 redis-3.0.0 solr-4.10.3 zookeeper-3.4.6
3 [root@localhost soft]# cd solr-4.10.3/
4 [root@localhost solr-4.10.3]# ls
5 bin contrib docs licenses LUCENE_CHANGES.txt README.txt
6 CHANGES.txt dist example LICENSE.txt NOTICE.txt SYSTEM_REQUIREMENTS.txt
7 [root@localhost solr-4.10.3]# ll
8 total 996
9 drwxr-xr-x. 2 root root 4096 Sep 8 00:35 bin
10 -rw-r--r--. 1 root root 406208 Dec 9 2014 CHANGES.txt
11 drwxr-xr-x. 13 root root 4096 Dec 9 2014 contrib
12 drwxr-xr-x. 4 root root 4096 Sep 8 00:35 dist
13 drwxr-xr-x. 17 root root 4096 Sep 8 00:35 docs
14 drwxr-xr-x. 15 root root 4096 Sep 8 00:35 example
15 drwxr-xr-x. 2 root root 28672 Sep 8 00:35 licenses
16 -rw-r--r--. 1 root root 12646 Dec 1 2014 LICENSE.txt
17 -rw-r--r--. 1 root root 501873 Dec 8 2014 LUCENE_CHANGES.txt
18 -rw-r--r--. 1 root root 24655 Dec 1 2014 NOTICE.txt
19 -rw-r--r--. 1 root root 5344 Dec 1 2014 README.txt
20 -rw-r--r--. 1 root root 850 Dec 1 2014 SYSTEM_REQUIREMENTS.txt
解压缩以后的目录介绍如下所示:
代码语言:javascript复制 1 bin:solr的运行脚本
2 contrib:solr的一些贡献软件/插件,用于增强solr的功能。
3 dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。docs:solr的API文档
4 example:solr工程的例子目录:
5 example/solr:
6 该目录是一个包含了默认配置信息的Solr的Core目录。
7 example/multicore:
8 该目录包含了在Solr的multicore中设置的多个Core目录。
9 example/webapps:
10 该目录中包括一个solr.war,该war可作为solr的运行实例工程。
11 licenses:solr相关的一些许可信息
solr需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(java写的Servlet容器),本教程使用Tocmat作为Servlet容器,环境如下: Solr:Solr4.10.3 Jdk:jdk1.7.0_72 Tomcat:apache-tomcat-7.0.53。
2、然后进入到solr的目录里面。将solr-4.10.3/example/webapps/solr.war文件到tomcat的webapps中。
代码语言:javascript复制1 [root@localhost soft]# cd solr-4.10.3/example/webapps/
2 [root@localhost webapps]# ls
3 solr.war
4 [root@localhost webapps]#
代码语言:javascript复制 1 将solr-4.10.3/example/webapps/solr.war文件到tomcat的webapps中。
2 # 创建一个sole目录
3 [root@localhost ~]# cd /usr/local/
4 [root@localhost local]# ls
5 bin etc games include lib libexec redis redis-cluster sbin share src
6 [root@localhost local]# mkdir solr
7 # 解压缩tomcat包,将tomcat移动到创建的solr目录里面
8 [root@localhost package]# tar -zxvf apache-tomcat-7.0.47.tar.gz
9 [root@localhost package]# ls
10 apache-tomcat-7.0.47 jdk-7u55-linux-i586.tar.gz redis-3.0.0.tar.gz zookeeper-3.4.6.tar.gz
11 apache-tomcat-7.0.47.tar.gz redis-3.0.0.gem solr-4.10.3.tgz.tar
12 [root@localhost package]#
13 [root@localhost package]# mv apache-tomcat-7.0.47 /usr/local/solr/tomcat
14 [root@localhost package]# cd /usr/local/solr/
15 [root@localhost solr]# ls
16 tomcat
17 [root@localhost solr]#
18 # 将solr.war移动到tomcat的webapps中。并检查是否移动到了tomcat的webapps中。
19 [root@localhost soft]# ls
20 apache-tomcat-7.0.47 dubbo-admin-2.5.4.war jdk1.7.0_55 redis-3.0.0 solr-4.10.3 zookeeper-3.4.6
21 [root@localhost soft]# cd solr-4.10.3/example/webapps/
22 [root@localhost webapps]# ls
23 solr.war
24 [root@localhost webapps]# cp solr.war /usr/local/solr/tomcat/webapps/
25 [root@localhost webapps]# cd /usr/local/solr/tomcat/webapps/
26 [root@localhost webapps]# ls
27 docs examples host-manager manager ROOT solr.war
28 [root@localhost webapps]#
然后进行解压缩solr.war包。
代码语言:javascript复制1 [root@localhost webapps]# mkdir solr && unzip solr.war -d solr && rm -rf solr.war
2 [root@localhost webapps]# ls
3 docs examples host-manager manager ROOT solr
然后修改解压缩好的solr文件夹,修改其web.xml配置文件。
代码语言:javascript复制1 [root@localhost webapps]# ls
2 docs examples host-manager manager ROOT solr
3 [root@localhost webapps]# cd solr/
4 [root@localhost solr]# ls
5 admin.html css favicon.ico img js META-INF tpl WEB-INF
6 [root@localhost solr]# cd WEB-INF/
7 [root@localhost WEB-INF]# ls
8 lib weblogic.xml web.xml
查找到env-entry内容,解开注释文本。并修改solr/home的地址。然后进行保存退出即可。
这里的solrhome是我解压缩的solr的路径地址。这个地址可以根据自己的解压缩路径进行配置即可。
代码语言:javascript复制1 <env-entry>
2 <env-entry-name>solr/home</env-entry-name>
3 <env-entry-value>/home/hadoop/soft/solr-4.10.3/example/solr</env-entry-value>
4 <env-entry-type>java.lang.String</env-entry-type>
5 </env-entry>
拷贝相关的jar包到tomcat目录下面。
代码语言:javascript复制 1 [root@localhost solr]# cd /home/hadoop/soft/
2 [root@localhost soft]# clear
3 [root@localhost soft]# ls
4 apache-tomcat-7.0.47 dubbo-admin-2.5.4.war jdk1.7.0_55 redis-3.0.0 solr-4.10.3 zookeeper-3.4.6
5 [root@localhost soft]# cd solr-4.10.3/example/lib/ext/ && cp * /usr/local/solr/tomcat/lib/
6 [root@localhost ext]# ls /usr/local/solr/tomcat/lib/
7 annotations-api.jar el-api.jar log4j-1.2.17.jar tomcat-coyote.jar tomcat-util.jar
8 catalina-ant.jar jasper-el.jar servlet-api.jar tomcat-dbcp.jar websocket-api.jar
9 catalina-ha.jar jasper.jar slf4j-api-1.7.6.jar tomcat-i18n-es.jar
10 catalina.jar jcl-over-slf4j-1.7.6.jar slf4j-log4j12-1.7.6.jar tomcat-i18n-fr.jar
11 catalina-tribes.jar jsp-api.jar tomcat7-websocket.jar tomcat-i18n-ja.jar
12 ecj-4.2.2.jar jul-to-slf4j-1.7.6.jar tomcat-api.jar tomcat-jdbc.jar
然后启动tomcat即可。可以查看启动日志。
代码语言:javascript复制 1 [root@localhost local]# ls
2 bin etc games include lib libexec redis redis-cluster sbin share solr src
3 [root@localhost local]# clear
4 [root@localhost local]# ls
5 bin etc games include lib libexec redis redis-cluster sbin share solr src
6 [root@localhost local]# cd solr/tomcat/
7 [root@localhost tomcat]# ls
8 bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
9 [root@localhost tomcat]# bin/startup.sh
10 Using CATALINA_BASE: /usr/local/solr/tomcat
11 Using CATALINA_HOME: /usr/local/solr/tomcat
12 Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
13 Using JRE_HOME: /home/hadoop/soft/jdk1.7.0_55
14 Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
15 [root@localhost tomcat]# tailf logs/catalina.out
16 Sep 08, 2019 1:24:20 AM org.apache.catalina.startup.HostConfig deployDirectory
17 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
18 Sep 08, 2019 1:24:20 AM org.apache.catalina.startup.HostConfig deployDirectory
19 INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
20 Sep 08, 2019 1:24:20 AM org.apache.coyote.AbstractProtocol start
21 INFO: Starting ProtocolHandler ["http-bio-8080"]
22 Sep 08, 2019 1:24:20 AM org.apache.coyote.AbstractProtocol start
23 INFO: Starting ProtocolHandler ["ajp-bio-8009"]
24 Sep 08, 2019 1:24:20 AM org.apache.catalina.startup.Catalina start
25 INFO: Server startup in 5854 ms
通过浏览器访问即可。可以看到solr提供的主页。
待续......