、使用Solr实现。
基于Solr实现站内搜索扩展性较好并且可以减少程序员的工作量,因为Solr提供了较为完备的搜索引擎解决方案,因此在门户、论坛等系统中常用此方案。 、什么是Solr。
Solr是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、
搜索性能进行了优化。
Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向 Solr 服务器发送一个描述 Field 及其内容的 XML 文档,
Solr根据xml文档添加、删除、更新索引 。Solr搜索只需要发送 HTTP GET 请求,然后对 Solr返回Xml、json等格式的查询结果进行解析,组织页面布局。
Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面可以查询Solr的配置和运行情况。 、Solr与Lucene的区别。
Lucene是一个开放源代码的全文检索引擎工具包,它不是一个完整的全文检索引擎,Lucene提供了完整的查询引擎和索引引擎,目的是为软件开发人员提供一个简单易用的
工具包,以方便的在目标系统中实现全文检索的功能,或者以Lucene为基础构建全文检索引擎。
Solr的目标是打造一款企业级的搜索引擎系统,它是一个搜索引擎服务,可以独立运行,通过Solr可以非常快速的构建企业的搜索引擎,通过Solr也可以高效的完成站内搜
索功能。

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容器。

安装过程步骤大致如下所示:

 [root@localhost package]# ls
apache-tomcat-7.0..tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10..tgz.tgz
[root@localhost package]# tar -zxvf jdk-7u55-linux-i586.tar.gz -C /home/hadoop/soft/
[root@localhost package]# vim /etc/profile
[root@localhost package]# source /etc/profile
[root@localhost package]# java
[root@localhost package]# javac
[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/

 [root@localhost package]# ls
apache-tomcat-7.0..tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10..tgz.tgz
[root@localhost package]# tar -zxvf solr-4.10..tgz.tgz -C /home/hadoop/soft/
[root@localhost package]# ls
apache-tomcat-7.0..tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10..tgz.tgz
[root@localhost package]# cd ..
[root@localhost hadoop]# ls
package soft
[root@localhost hadoop]# cd soft/
[root@localhost soft]# ls
jdk1..0_55 solr-4.10.
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]#

3、安装tomcat服务器。

[root@localhost package]# tar -zxvf apache-tomcat-7.0.47.tar.gz -C /home/hadoop/soft/

 [root@localhost package]# ls
apache-tomcat-7.0..tar.gz jdk-7u55-linux-i586.tar.gz solr-4.10..tgz.tgz
[root@localhost package]# tar -zxvf apache-tomcat-7.0..tar.gz -C /home/hadoop/soft/

然后将tomcat安装到/user/local目录里面:

 [root@localhost soft]# mkdir /usr/local/solr
[root@localhost soft]# cp -r apache-tomcat-7.0./ /usr/local/solr/tomcat
[root@localhost soft]# cd /usr/local/solr/tomcat/
[root@localhost tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@localhost tomcat]#

4、部署好tomcat以后,将war包部署到tomcat下面即可。然后进行解压缩solr操作,启动tomcat就可以完成solr的解压缩操作。

 [root@localhost tomcat]# cp /home/hadoop/soft/solr-4.10./dist/solr-4.10..war /usr/local/solr/tomcat/webapps/
You have mail in /var/spool/mail/root
[root@localhost tomcat]# cd /usr/local/solr/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT solr-4.10..war
[root@localhost webapps]#

启动tomcat完成解压缩solr的war包。

 [root@localhost webapps]# cd /usr/local/solr/tomcat/
[root@localhost tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@localhost tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/solr/tomcat
Using CATALINA_HOME: /usr/local/solr/tomcat
Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
Using JRE_HOME: /home/hadoop/soft/jdk1..0_55
Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]# tail -f logs/catalina.out
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/manager
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/ROOT
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/examples
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep , :: AM org.apache.catalina.startup.Catalina start
INFO: Server startup in ms

可以看到solr的war包已经解压缩了。

然后关闭solr,将一些jar包复制到solr里面。关闭tomcat,删除webapps里面的solr-4.10.3.war这个war 包,你可以将solr-4.10.3.war这个war包删除了或者留着也行。删除的话,一定要先关闭tomcat,然后进行删除war包操作。

 bin  conf  lib  LICENSE  logs  NOTICE  RELEASE-NOTES  RUNNING.txt  temp  webapps  work
[root@localhost tomcat]# bin/shutdown.sh
Using CATALINA_BASE: /usr/local/solr/tomcat
Using CATALINA_HOME: /usr/local/solr/tomcat
Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
Using JRE_HOME: /home/hadoop/soft/jdk1..0_55
Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]#

复制一些日志相关的jar包加到solr里面。

 [root@localhost soft]# cd solr-4.10./
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# clear
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# cd example/
[root@localhost example]# ls
contexts etc example-DIH exampledocs example-schemaless lib logs multicore README.txt resources scripts solr solr-webapp start.jar webapps
[root@localhost example]# cd lib/
[root@localhost lib]# ls
ext jetty-http-8.1..v20130312.jar jetty-security-8.1..v20130312.jar jetty-util-8.1..v20130312.jar servlet-api-3.0.jar
jetty-continuation-8.1..v20130312.jar jetty-io-8.1..v20130312.jar jetty-server-8.1..v20130312.jar jetty-webapp-8.1..v20130312.jar
jetty-deploy-8.1..v20130312.jar jetty-jmx-8.1..v20130312.jar jetty-servlet-8.1..v20130312.jar jetty-xml-8.1..v20130312.jar
[root@localhost lib]# cd ext/
[root@localhost ext]# ls
jcl-over-slf4j-1.7..jar jul-to-slf4j-1.7..jar log4j-1.2..jar slf4j-api-1.7..jar slf4j-log4j12-1.7..jar
[root@localhost ext]# cp * /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/lib/
[root@localhost ext]# cd /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/lib/
[root@localhost lib]# ls
antlr-runtime-3.5.jar commons-lang-2.6.jar hppc-0.5..jar lucene-analyzers-common-4.10..jar lucene-join-4.10..jar org.restlet-2.1..jar wstx-asl-3.2..jar
asm-4.1.jar concurrentlinkedhashmap-lru-1.2.jar httpclient-4.3..jar lucene-analyzers-kuromoji-4.10..jar lucene-memory-4.10..jar org.restlet.ext.servlet-2.1..jar zookeeper-3.4..jar
asm-commons-4.1.jar dom4j-1.6..jar httpcore-4.3.jar lucene-analyzers-phonetic-4.10..jar lucene-misc-4.10..jar protobuf-java-2.5..jar
commons-cli-1.2.jar guava-14.0..jar httpmime-4.3..jar lucene-codecs-4.10..jar lucene-queries-4.10..jar slf4j-api-1.7..jar
commons-codec-1.9.jar hadoop-annotations-2.2..jar jcl-over-slf4j-1.7..jar lucene-core-4.10..jar lucene-queryparser-4.10..jar slf4j-log4j12-1.7..jar
commons-configuration-1.6.jar hadoop-auth-2.2..jar joda-time-2.2.jar lucene-expressions-4.10..jar lucene-spatial-4.10..jar solr-core-4.10..jar
commons-fileupload-1.2..jar hadoop-common-2.2..jar jul-to-slf4j-1.7..jar lucene-grouping-4.10..jar lucene-suggest-4.10..jar solr-solrj-4.10..jar
commons-io-2.3.jar hadoop-hdfs-2.2..jar log4j-1.2..jar lucene-highlighter-4.10..jar noggit-0.5.jar spatial4j-0.4..jar
[root@localhost lib]#

操作如下所示:

复制完jar包,开始配置solr home。

 [root@localhost solr-4.10.]# cd /home/hadoop/soft/solr-4.10./
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# clear
[root@localhost solr-4.10.]# ls
bin CHANGES.txt contrib dist docs example licenses LICENSE.txt LUCENE_CHANGES.txt NOTICE.txt README.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# cd example/
[root@localhost example]# ls
contexts etc example-DIH exampledocs example-schemaless lib logs multicore README.txt resources scripts solr solr-webapp start.jar webapps
[root@localhost example]# cp -r solr /usr/local/solr/solrhome
[root@localhost example]# cd /usr/local/solr/solrhome/
[root@localhost solrhome]# ls
bin collection1 README.txt solr.xml zoo.cfg
[root@localhost solrhome]#

然后进行solr home的配置文件配置,solr也已经安装好了,solrhome也已经配置好了,然后将将solr和solrhome进行关联,建立关系,solr不知道solrhome在那里,那么

配置一下,告诉solr,solrhome在那里。操作方式有,可以修改tomcat的配置文件,或者去修改solr的web.xml,这种方式比较简单。建议使用。

 [root@localhost ~]# ls
anaconda-ks.cfg Desktop Documents Downloads install.log install.log.syslog Music Pictures Public Templates Videos
[root@localhost ~]# cd /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/
[root@localhost WEB-INF]# ls
lib weblogic.xml web.xml
[root@localhost WEB-INF]# vim web.xml

配置方式如下所示:

 <env-entry>
<env-entry-name>solr/home</env-entry-name>
<!-- <env-entry-value>/put/your/solr/home/here</env-entry-value> -->
<env-entry-value>/usr/local/solr/solrhome/</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</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目录

 [root@localhost WEB-INF]# cd /usr/local/solr/tomcat/
[root@localhost tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@localhost tomcat]# clear
[root@localhost tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/solr/tomcat
Using CATALINA_HOME: /usr/local/solr/tomcat
Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
Using JRE_HOME: /home/hadoop/soft/jdk1..0_55
Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]# tail -f logs/catalina.out
Sep , :: AM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Sep , :: AM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in ms
Sep , :: AM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep , :: AM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/7.0.
Sep , :: AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /usr/local/solr/tomcat/webapps/solr-4.10..war
log4j:WARN No appenders could be found for logger (org.apache.solr.client.solrj.impl.HttpClientUtil).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/manager
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/ROOT
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/examples
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep , :: AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 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传到自己的服务器上面。

 [root@localhost package]# ll
total
-rwxrw-rw-. root root Jul : apache-tomcat-7.0..tar.gz
drwxr-xr-x. root root Sep : IK Analyzer 2012FF_hf1
-rw-r--r--. root root Sep : IK Analyzer 2012FF_hf1.rar
-rwxrw-rw-. root root Jul : jdk-7u55-linux-i586.tar.gz
-rwxrw-rw-. root root Jul : solr-4.10..tgz.tgz
[root@localhost package]# cd IK\ Analyzer\ 2012FF_hf1
[root@localhost IK Analyzer 2012FF_hf1]# ls
doc ext_stopword.dic IKAnalyzer2012FF_u1.jar IKAnalyzer.cfg.xml IKAnalyzer???ķִ???V2012_FFʹ???ֲ?.pdf LICENSE.txt mydict.dic NOTICE.txt
[root@localhost IK Analyzer 2012FF_hf1]# ll
total
drwxr-xr-x. root root Sep : doc
-rw-r--r--. root root Sep : ext_stopword.dic
-rw-r--r--. root root Sep : IKAnalyzer2012FF_u1.jar
-rw-r--r--. root root Sep : IKAnalyzer.cfg.xml
-rw-r--r--. root root Sep : IKAnalyzer???ķִ???V2012_FFʹ???ֲ?.pdf
-rw-r--r--. root root Sep : LICENSE.txt
-rw-r--r--. root root Sep : mydict.dic
-rw-r--r--. root root Sep : NOTICE.txt
[root@localhost IK Analyzer 2012FF_hf1]#

然后将IKAnalyzer2012FF_u1.jar这个jar包添加到solr里面。

 [root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer2012FF_u1.jar /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/lib/
[root@localhost IK Analyzer 2012FF_hf1]# ll /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/lib/IKAnalyzer2012FF_u1.jar
-rw-r--r--. root root Sep : /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/lib/IKAnalyzer2012FF_u1.jar
[root@localhost IK Analyzer 2012FF_hf1]#

然后将ext_stopword.dic这个是提供词词典,IKAnalyzer.cfg.xml这个是配置文件,mydict.dic这个是扩展词词典添加到classpath里面。对于这个solr项目的classpath相当于在WEB-INF下面的classes。

 total
drwxr-xr-x. root root Sep : lib
-rw-r--r--. root root Dec weblogic.xml
-rw-r--r--. root root Sep : web.xml
[root@localhost IK Analyzer 2012FF_hf1]# mkdir /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/clases
[root@localhost IK Analyzer 2012FF_hf1]#
[root@localhost IK Analyzer 2012FF_hf1]# cp IKAnalyzer.cfg.xml ext_stopword.dic mydict.dic /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/classes
[root@localhost IK Analyzer 2012FF_hf1]# ll /usr/local/solr/tomcat/webapps/solr-4.10./WEB-INF/classes
total
-rw-r--r--. root root Sep : ext_stopword.dic
-rw-r--r--. root root Sep : IKAnalyzer.cfg.xml
-rw-r--r--. root root Sep : mydict.dic
[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配置了所有使用到的业务域(业务域和业务域的类型)。

 [root@localhost ~]# cd /usr/local/solr/solrhome/
[root@localhost solrhome]# ls
bin collection1 README.txt solr.xml zoo.cfg
[root@localhost solrhome]# ll
total
drwxr-xr-x. root root Sep : bin
drwxr-xr-x. root root Sep : collection1
-rw-r--r--. root root Sep : README.txt
-rw-r--r--. root root Sep : solr.xml
-rw-r--r--. root root Sep : zoo.cfg
[root@localhost solrhome]# cd collection1/
[root@localhost collection1]# ls
conf core.properties data README.txt
[root@localhost collection1]# cd conf/
[root@localhost conf]# ls
admin-extra.html clustering lang protwords.txt _schema_analysis_synonyms_english.json solrconfig.xml synonyms.txt xslt
admin-extra.menu-bottom.html currency.xml mapping-FoldToASCII.txt _rest_managed.json schema.xml spellings.txt update-script.js
admin-extra.menu-top.html elevate.xml mapping-ISOLatin1Accent.txt _schema_analysis_stopwords_english.json scripts.conf stopwords.txt velocity
[root@localhost conf]# ll
total
-rw-r--r--. root root Sep : admin-extra.html
-rw-r--r--. root root Sep : admin-extra.menu-bottom.html
-rw-r--r--. root root Sep : admin-extra.menu-top.html
drwxr-xr-x. root root Sep : clustering
-rw-r--r--. root root Sep : currency.xml
-rw-r--r--. root root Sep : elevate.xml
drwxr-xr-x. root root Sep : lang
-rw-r--r--. root root Sep : mapping-FoldToASCII.txt
-rw-r--r--. root root Sep : mapping-ISOLatin1Accent.txt
-rw-r--r--. root root Sep : protwords.txt
-rw-r--r--. root root Sep : _rest_managed.json
-rw-r--r--. root root Sep : _schema_analysis_stopwords_english.json
-rw-r--r--. root root Sep : _schema_analysis_synonyms_english.json
-rw-r--r--. root root Sep : schema.xml
-rw-r--r--. root root Sep : scripts.conf
-rw-r--r--. root root Sep : solrconfig.xml
-rw-r--r--. root root Sep : spellings.txt
-rw-r--r--. root root Sep : stopwords.txt
-rw-r--r--. root root Sep : synonyms.txt
-rw-r--r--. root root Sep : update-script.js
drwxr-xr-x. root root Sep : velocity
drwxr-xr-x. root root Sep : xslt
[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只有这种类型可以定义分析器。

步骤如下所示,下面是举例说明,和实际自己操作略有不同。

第一步:首先需要在types结点内定义一个FieldType子结点,包括name,class,等参数,name就是这个FieldType的名称,class指向org.apache.solr.analysis包里面对应的class名称,用来定义这个类型的行为。在FieldType定义的时候最重要的就是定义这个类型的数据在建立索引和进行查询的时候要使用的分析器analyzer,包括分词和过滤。

 <!-- IKAnalyzer-->
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

第二步,Field,FieldType定义好后就可以在fields结点内定义具体的field,filed定义包括n ame,type(即FieldType),indexed(是否被索引),stored(是否被储存),multi Valued(是否有多个值)等。

 <!--IKAnalyzer Field-->
<field name="title_ik" type="text_ik" indexed="true" stored="true" />
<field name="content_ik" type="text_ik" indexed="true" stored="false" multiValued="true"/>

开始配置业务域(业务域的定义),如下所示:

 <!-- IKAnalyzer-->
<!-- 域的定义和域的类型,然后就可以定义自己的业务域了 -->
<!-- 自定义分析器,name是自己的名称,不要重复-->
<!-- 定义自己的fieldType,然后指定了name为text_ik,类型是solr.TextField -->
<fieldType name="text_ik" class="solr.TextField">
<!--指定analyzer是IK analyzer-->
<analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType> <!-- 定义自己的业务域 -->
<!-- 原本solr里面已经有了id,所以这个id可以不用定义了 -->
<!-- String类型是不分词的,但是建立索引的。Text类型是既分词也建立索引。 -->
<field name="item_title" type="text_ik" indexed="true" stored="true"/>
<field name="item_sell_point" type="text_ik" indexed="true" stored="true"/>
<field name="item_price" type="long" indexed="true" stored="true"/>
<field name="item_image" type="string" indexed="false" stored="true" />
<field name="item_category_name" type="string" indexed="true" stored="true" />
<field name="item_desc" type="text_ik" indexed="true" stored="false" /> <!-- item_keywords建立了几个复制域。复制域就是把某几个域都复制到这里面去,进行统一管理。然后这个域就包含了复制域的全部内容。将来搜索的时候只要搜索包含复制域的即可。 -->
<field name="item_keywords" type="text_ik" indexed="true" stored="false" multiValued="true"/>
<copyField source="item_title" dest="item_keywords"/>
<copyField source="item_sell_point" dest="item_keywords"/>
<copyField source="item_category_name" dest="item_keywords"/>

业务数据SQL编写。首先重启你的tomcat。配置好业务域,重启完了tomct,如何看自己的业务域是否好使呢。如下所示:

fieldType的分词效果,找到自定义分析器text_ik。

然后呢,测试item_title的分词效果。

如上效果,说明你的业务域就已经生效了。有了业务域,需要将数据从数据库导入到索引库中去。这里不推荐使用Dataimport进行数据导入的。

5、什么是solrJ?

答:solrj是访问Solr服务的java客户端,提供索引和搜索的请求方法,SolrJ通常在嵌入在业务系统中,通过SolrJ的API接口操作Solr服务。

6、创建索引,使用SolrJ创建索引,通过调用solrJ提供的API请求solr服务,Document通过solrInputDocument进行构建。使用solrj可以将数据库的数据导入到索引库里面的。

注意:solr里面的更新操作就是新增,根据id查找到该数据,然后将它删除了,再添加一条新的数据。

说明:根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。

 package com.taotao.search.service;

 import java.io.IOException;

 import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test; /**
*
* @ClassName: TaoTaoSolrJ.java
* @author: biehl
* @since: 2019年9月7日 下午2:30:05
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
public class TaoTaoSolrJ { @Test
public void taotaoSolrJ() {
try {
// 向solr里面添加文档
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
// 2、需要指定Solr服务的url
// 3、创建一个文档对象SolrInputDocument
SolrInputDocument document = new SolrInputDocument();
// 4、向文档中添加域,必须写id域,域的名称必须在schema.xml中定义
document.addField("id", "test002");
document.addField("item_title", "测试商品1");
document.addField("item_sell_point", "测试商品好的很");
document.addField("item_price", );
document.addField("item_image", "testimg");
document.addField("item_category_name", "搞什么啊");
document.addField("item_desc", "你妹的"); // 5、把文档对象写入到索引库中
server.add(document);
// 6、提交
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } @Test
public void taotaoSolrJDeleteById() {
try {
// 向solr里面添加文档
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1"); //2、 删除操作
server.deleteById("test001"); // 3、提交
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } @Test
public void taotaoSolrJDeleteByQuery() {
try {
// 向solr里面添加文档
// 1、创建SolrServer对象。创建一个HttpSolrServer对象
SolrServer server = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1"); //2、 删除操作
server.deleteByQuery("id:test002"); // 3、提交
server.commit();
} catch (SolrServerException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} } }

点击Execute Query就可以进行查询操作了的。

删除以后如下所示:

查询solr的方法使用:

 package com.taotao.search.service;

 import java.io.IOException;
import java.util.List;
import java.util.Map; import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.HttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;
import org.apache.solr.common.SolrDocument;
import org.apache.solr.common.SolrDocumentList;
import org.apache.solr.common.SolrInputDocument;
import org.junit.Test; /**
*
* @ClassName: TaoTaoSolrJ.java
* @author: biehl
* @since: 2019年9月7日 下午2:30:05
* @Copyright: ©2019 biehl 版权所有
* @version: 0.0.1
* @Description:
*/
public class TaoTaoSolrJ { @Test
public void searchDocument() {
try {
// 1、创建一个SolrServer对象
SolrServer solrServer = new HttpSolrServer("http://192.168.110.142:8080/solr-4.10.3/collection1");
// 2、创建一个SolrQuery对象
SolrQuery solrQuery = new SolrQuery();
// 3、设置查询条件,过滤条件,分页条件,排序条件,高亮
// key的q就是指查询条件。
// solrQuery.set("q", "*:*"); //等价于solrQuery.setQuery("*:*");
// 查询所有的不能指定高亮的。
// solrQuery.setQuery("*:*");// *:*是查询出所有的。
// 这里没有指定在那里域上面进行搜索,所以需要指定默认搜索域
solrQuery.setQuery("手机");
// 分页默认是0-10。分页条件。
solrQuery.setStart();// 起始数
solrQuery.setRows();// 查询出多少条
// 设置默认搜索域。
solrQuery.set("df", "item_keywords");
// 设置高亮。
solrQuery.setHighlight(true);// 开启高亮
// 设置高亮显示的域
solrQuery.addHighlightField("item_title");
// 设置高亮显示的前缀和后缀
solrQuery.setHighlightSimplePre("<em>");
solrQuery.setHighlightSimplePost("</em>"); // 4、执行查询,得到一个Response对象
QueryResponse response = solrServer.query(solrQuery); // 5、取出查询结果总记录数
SolrDocumentList solrDocumentList = response.getResults();
// 查询出结果总记录数
System.out.println("查询结果总记录数: " + solrDocumentList.getNumFound()); for (SolrDocument solrDocument : solrDocumentList) {
System.out.println("id : " + solrDocument.get("id"));
// 取出高亮显示
Map<String, Map<String, List<String>>> highlighting = response.getHighlighting();
List<String> list = highlighting.get(solrDocument.get("id")).get("item_title");
String itemTitle = "";
if (list != null && list.size() > ) {
itemTitle = list.get();
} else {
itemTitle = (String) solrDocument.get("item_title");
}
System.out.println(itemTitle);
// System.out.println("item_title : " + solrDocument.get("item_title"));
System.out.println("item_price : " + solrDocument.get("item_price"));
System.out.println("item_image : " + solrDocument.get("item_image"));
System.out.println("item_category_name : " + solrDocument.get("item_category_name"));
System.out.println("item_desc : " + solrDocument.get("item_desc"));
System.out.println("=============================================");
} } catch (SolrServerException e) {
e.printStackTrace();
} } }

效果如下所示:


2019-09-08 15:52:30

1、记录了Solr单机版第二种部署方案:

将solr的安装包传到机器上以后,进行解压缩操作。

[root@localhost package]# tar -zxvf solr-4.10.3.tgz.tar -C /home/hadoop/soft/

 [root@localhost soft]# ls
apache-tomcat-7.0. dubbo-admin-2.5..war jdk1..0_55 redis-3.0. solr-4.10. zookeeper-3.4.
[root@localhost soft]# cd solr-4.10./
[root@localhost solr-4.10.]# ls
bin contrib docs licenses LUCENE_CHANGES.txt README.txt
CHANGES.txt dist example LICENSE.txt NOTICE.txt SYSTEM_REQUIREMENTS.txt
[root@localhost solr-4.10.]# ll
total
drwxr-xr-x. root root Sep : bin
-rw-r--r--. root root Dec CHANGES.txt
drwxr-xr-x. root root Dec contrib
drwxr-xr-x. root root Sep : dist
drwxr-xr-x. root root Sep : docs
drwxr-xr-x. root root Sep : example
drwxr-xr-x. root root Sep : licenses
-rw-r--r--. root root Dec LICENSE.txt
-rw-r--r--. root root Dec LUCENE_CHANGES.txt
-rw-r--r--. root root Dec NOTICE.txt
-rw-r--r--. root root Dec README.txt
-rw-r--r--. root root Dec SYSTEM_REQUIREMENTS.txt

解压缩以后的目录介绍如下所示:

 bin:solr的运行脚本
contrib:solr的一些贡献软件/插件,用于增强solr的功能。
dist:该目录包含build过程中产生的war和jar文件,以及相关的依赖文件。docs:solr的API文档
example:solr工程的例子目录:
example/solr:
该目录是一个包含了默认配置信息的Solr的Core目录。
example/multicore:
该目录包含了在Solr的multicore中设置的多个Core目录。
example/webapps:
该目录中包括一个solr.war,该war可作为solr的运行实例工程。
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中。

 [root@localhost soft]# cd solr-4.10./example/webapps/
[root@localhost webapps]# ls
solr.war
[root@localhost webapps]#
 将solr-4.10./example/webapps/solr.war文件到tomcat的webapps中。
# 创建一个sole目录
[root@localhost ~]# cd /usr/local/
[root@localhost local]# ls
bin etc games include lib libexec redis redis-cluster sbin share src
[root@localhost local]# mkdir solr
# 解压缩tomcat包,将tomcat移动到创建的solr目录里面
[root@localhost package]# tar -zxvf apache-tomcat-7.0..tar.gz
[root@localhost package]# ls
apache-tomcat-7.0. jdk-7u55-linux-i586.tar.gz redis-3.0..tar.gz zookeeper-3.4..tar.gz
apache-tomcat-7.0..tar.gz redis-3.0..gem solr-4.10..tgz.tar
[root@localhost package]#
[root@localhost package]# mv apache-tomcat-7.0. /usr/local/solr/tomcat
[root@localhost package]# cd /usr/local/solr/
[root@localhost solr]# ls
tomcat
[root@localhost solr]#
# 将solr.war移动到tomcat的webapps中。并检查是否移动到了tomcat的webapps中。
[root@localhost soft]# ls
apache-tomcat-7.0. dubbo-admin-2.5..war jdk1..0_55 redis-3.0. solr-4.10. zookeeper-3.4.
[root@localhost soft]# cd solr-4.10./example/webapps/
[root@localhost webapps]# ls
solr.war
[root@localhost webapps]# cp solr.war /usr/local/solr/tomcat/webapps/
[root@localhost webapps]# cd /usr/local/solr/tomcat/webapps/
[root@localhost webapps]# ls
docs examples host-manager manager ROOT solr.war
[root@localhost webapps]#

然后进行解压缩solr.war包。

 [root@localhost webapps]# mkdir solr && unzip solr.war -d solr && rm -rf solr.war
[root@localhost webapps]# ls
docs examples host-manager manager ROOT solr

修改Tomcat的url字符集,修改conf/server.xml文件。

 <Connector port="" protocol="HTTP/1.1" connectionTimeout="" redirectPort="" URLEncoding="UTF-8"/>

然后修改解压缩好的solr文件夹,修改其web.xml配置文件。

 [root@localhost webapps]# ls
docs examples host-manager manager ROOT solr
[root@localhost webapps]# cd solr/
[root@localhost solr]# ls
admin.html css favicon.ico img js META-INF tpl WEB-INF
[root@localhost solr]# cd WEB-INF/
[root@localhost WEB-INF]# ls
lib weblogic.xml web.xml

查找到env-entry内容,解开注释文本。并修改solr/home的地址。然后进行保存退出即可。

这里的solrhome是我解压缩的solr的路径地址。这个地址可以根据自己的解压缩路径进行配置即可。

 <env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/home/hadoop/soft/solr-4.10./example/solr</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

拷贝相关的jar包到tomcat目录下面。

 [root@localhost solr]# cd /home/hadoop/soft/
[root@localhost soft]# clear
[root@localhost soft]# ls
apache-tomcat-7.0. dubbo-admin-2.5..war jdk1..0_55 redis-3.0. solr-4.10. zookeeper-3.4.
[root@localhost soft]# cd solr-4.10./example/lib/ext/ && cp * /usr/local/solr/tomcat/lib/
[root@localhost ext]# ls /usr/local/solr/tomcat/lib/
annotations-api.jar el-api.jar log4j-1.2..jar tomcat-coyote.jar tomcat-util.jar
catalina-ant.jar jasper-el.jar servlet-api.jar tomcat-dbcp.jar websocket-api.jar
catalina-ha.jar jasper.jar slf4j-api-1.7..jar tomcat-i18n-es.jar
catalina.jar jcl-over-slf4j-1.7..jar slf4j-log4j12-1.7..jar tomcat-i18n-fr.jar
catalina-tribes.jar jsp-api.jar tomcat7-websocket.jar tomcat-i18n-ja.jar
ecj-4.2..jar jul-to-slf4j-1.7..jar tomcat-api.jar tomcat-jdbc.jar

然后启动tomcat即可。可以查看启动日志。

[root@localhost apache-tomcat-7.0.47]# tail -f -n 500 /home/hadoop/soft/apache-tomcat-7.0.47/logs/catalina.out

 [root@localhost local]# ls
bin etc games include lib libexec redis redis-cluster sbin share solr src
[root@localhost local]# clear
[root@localhost local]# ls
bin etc games include lib libexec redis redis-cluster sbin share solr src
[root@localhost local]# cd solr/tomcat/
[root@localhost tomcat]# ls
bin conf lib LICENSE logs NOTICE RELEASE-NOTES RUNNING.txt temp webapps work
[root@localhost tomcat]# bin/startup.sh
Using CATALINA_BASE: /usr/local/solr/tomcat
Using CATALINA_HOME: /usr/local/solr/tomcat
Using CATALINA_TMPDIR: /usr/local/solr/tomcat/temp
Using JRE_HOME: /home/hadoop/soft/jdk1..0_55
Using CLASSPATH: /usr/local/solr/tomcat/bin/bootstrap.jar:/usr/local/solr/tomcat/bin/tomcat-juli.jar
[root@localhost tomcat]# tailf logs/catalina.out
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/host-manager
Sep , :: AM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory /usr/local/solr/tomcat/webapps/docs
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-bio-8080"]
Sep , :: AM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-bio-8009"]
Sep , :: AM org.apache.catalina.startup.Catalina start
INFO: Server startup in ms

通过浏览器访问即可。可以看到solr提供的主页。

Solr单机版的安装与使用的更多相关文章

  1. solr单机版安装与基本部署

    安装solr准备工作: linux/tomcat/jdk solr单机版的安装 1.解压缩tomcat安装包 tar -zxf tomcat-xxx.tar.gz 2.创建文件夹:mkdir /usr ...

  2. solr单机版的搭建

    一.solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写的Servlet容器程 ...

  3. 搭建solr单机版

    solr单机版的搭建 一.solr单机版的搭建 1.运行环境 solr 需要运行在一个Servlet容器中,Solr4.10.3要求jdk使用1.7以上,Solr默认提供Jetty(ja),本教va写 ...

  4. Nutch搜索引擎(第2期)_ Solr简介及安装

    1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置.可扩展并对查询性能进行了优化 ...

  5. Solr 1.3 安装步骤

    可以通过以下三种方式之一设置   Solr   的主位置: 1.设置   java   系统属性   solr.solr.home   (没错,就是  solr.solr.home).    2.配置 ...

  6. Zookeeper、Solr和Tomcat安装配置实践

    Zookeeper.Solr和Tomcat安装配置实践

  7. Nutch搜索引擎Solr简介及安装

    Nutch搜索引擎(第2期)_ Solr简介及安装   1.Solr简介 Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器.同时对其进行了扩展,提供了比Lucene更为丰富的 ...

  8. 最新版Solr 7.2安装配置

    Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口.用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引:也可以通过Http Get操 ...

  9. Solr学习、安装与Quick Start

    之前用Lucene进行了一些简单的例子,现在安装Solr学习一下. 在mac下,貌似可以直接brew install solr来进行安装.尝试一下. 貌似安装成功了: ==> Summary

随机推荐

  1. 使用ADO.NET实体数据模型

    前景:要操作的数据表必须添加主键(方式:进入数据库-->数据表名-->设计-->列名右键-->设置主键) 可在服务器资源管理器中查看是否设置了主键(主键会有一把钥匙的图样) 1 ...

  2. Java并发编程杂记(2)

    对象共享 synchronized 设定原子性确定临界区 + 内存可见性 要解决如下问题 防止一个线程在使用对象状态而另一个线程在修改对象状态:且当一个线程修改了对象状态后,对其他线程可见.   可见 ...

  3. PHP面试题2019年阿里巴巴面试题及答案解析

    一.单选题(共27题,每题5分) 1.Memcache与Redis的比较错误的是? A.Memcache过期后,不删除缓存,会导致下次取数据数据的问题,Redis有专门线程,清除缓存数据: B.Mem ...

  4. Define the Data Model and Set the Initial Data 定义数据模型并设置初始数据

    This topic describes how to define the business model and the business logic for WinForms and ASP.NE ...

  5. Dynamics CRM中的操作(action)是否是一个事务(transaction)?

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复168或者20151104可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 以前的博文 微软Dynamics ...

  6. ABAP动态自建表维护程序Dynamin Process

    以前经常会遇到批量上传或修改数据到自建表的需求,所以在想是否可以做一个动态的程序,所有的自建表都可以用这个动态程序来维护. 于是就打算试着写动态的程序. 程序的要求:动态显示自建表ALV 动态下载Ex ...

  7. [20190920]完善vim调用sqlplus脚本.txt

    [20190920]完善vim调用sqlplus脚本.txt --//以前写的http://blog.itpub.net/267265/viewspace-2140936/=>[20170617 ...

  8. Falling back to java on path. This behavior is deprecated

    windows启动elasticsearch报错:warning: Falling back to java on path. This behavior is deprecated. Specify ...

  9. 好用的代码统计小工具SourceCounter(下载)

    SourceCounter下载链接 https://pan.baidu.com/s/12Cg51L0hRn5w-m1NQJ-Xlg 提取码:i1cd 很多时候我们需要统计自己所写的代码的数量.举个栗子 ...

  10. 201871010113-刘兴瑞《面向对象程序设计(java)》第四周学习总结

    项目 内容 这个作业属于哪个课程 <任课教师博客主页链接>https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 <作业链接地址>http ...