1.Solr简介
Solr是一个独立的企业级搜索应用服务器,它对外提供API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引(solr生成倒排索引,数据库生成的索引是二叉树索引,效率差距很大);也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。Solr是一个类似于Google或者Bing的全文检索引擎, Solr是与搜索引擎优化(SEO)相关联的。很多公司也使用elasticsearch作为搜索引擎。
Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务器。Solr可以独立运行在Jetty、Tomcat等这些Servlet容器中。Solr提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
2.Solr安装
1、下载相关资源
① 下载solr压缩包:https://www.apache.org/dyn/closer.lua/lucene/solr/7.7.2/solr-7.7.2.zip
②下载 中文分词:http://search.maven.org/#search%7Cga%7C1%7Ccom.github.magese
2、 安装
①解压刚刚下载好的solr-7.7.2.zip ,解压后文件夹名称:solr-7.7.2;
②将 solr 压缩包中 solr-7.7.2\server\solr-webapp\文件夹下有个webapp文件夹,将之复制到Tomcat8\webapps\目录下,文件夹名改成solr;
③将solr-7.7.2/server/lib/ext目录下的所有jar包和复制粘贴到tomcat下的solr项目(即第二步操作的文件夹)的WEB-INF/lib目录下;
④solr-7.7.2\server\lib下metrics开头的5个jar包粘贴到tomcat8\webapps\solr\WEB-INF\lib下
⑤在tomcat下的solr项目的WEB-INF下新建classes文件夹,然后把solr-7.7.2/server/resources下的jetty-logging.properties粘贴过去;
⑥将solr-7.7.2/server/solr 下所有文件复制到计算机某个目录下,如D:\solr-home(solr创建的core到时会存放在该目录下);
⑦ 打开Tomcat/webapps/solr/WEB-INF下的web.xml,找到如下配置内容(初始状态下该内容是被注释掉的),如果找不就在<web-app>标签下添加:
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<!-- 此处需要将D:/solr-home 修改为你自己的路径 -->
<env-entry-value>D:/solr-home</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>
注释掉文件最后的如下内容:
<!-- Get rid of error message -->
<!--<security-constraint>
<web-resource-collection>
<web-resource-name>Disable TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method>TRACE</http-method>
</web-resource-collection>
<auth-constraint/>
</security-constraint>
<security-constraint>
<web-resource-collection>
<web-resource-name>Enable everything but TRACE</web-resource-name>
<url-pattern>/</url-pattern>
<http-method-omission>TRACE</http-method-omission>
</web-resource-collection>
</security-constraint> -->
⑧以上步骤完成后,启动Tomcat8,访问:http://localhost:8080/solr/index.html 界面如下,即安装成功(当然前提你tomcat 和jdk 都按照无误)
3、创建core
①在D:\solr-home下创建core2文件夹(名称与下图的instanceDir一致,建议下图中的name也和该文件夹名一致);
②在core文件夹下创建data和conf文件夹;
③将solr-7.7.2\example\example-DIH\solr\solr\conf里所有文件和文件夹都copy到D:\solr-home\core2\conf下;
④重启tomcat,访问http://localhost:8080/solr/index.html
添加成功后,在“Core Selector”这里可以查询和编辑你的solr相关信息;
4、solr界面简介
5、中文分词器+数据库
①将下载好的ik-analyzer-solr7-7.x.jar 和solr-7.7.2/dist下的solr-dataimporthandler-7.7.2.jar、solr-dataimporthandler-extras-7.7.2.jar复制到 tomcat8\webapps\solr\WEB-INF\lib 下
②复制solr-7.7.2/example/example-DIH/solr/db/conf/下的db-data-config.xml到solr-home/core2/conf/下,此处改名为data-config.xml(可以不改名)。并修改data-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<dataConfig>
<dataSource type="JdbcDataSource"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.1.15:3306/dny_shop?useUnicode=true&characterEncoding=utf8"
user="tanlei"
password="root"/>
<document>
<!--指定需要导入的数据库表名,以及数据 -->
<entity name="mobile_choiceness" dataSource="JdbcDataSource"
query="select * from mobile_choiceness">
<!-- 每一个field映射着数据库中列与文档中的域,column是数据库列,name是solr的域(必须是在managed-schema文件中配置过的域才行) -->
<field name="id" column="chs_id" />
<field name="release_time" column="release_time" />
<field name="viewed" column="viewed" />
<field name="content" column="content" />
<field name="like_number" column="like_number" />
<field name="chs_title" column="chs_title" />
<field name="chs_author" column="chs_author" />
<field name="status" column="status" />
</entity>
</document>
</dataConfig>
数据配置可以参考官方文档:https://wiki.apache.org/solr/DIHQuickStart
③修改同级目录中的 solrconfig.xml文件,在文末的标签</config> 上面添加如下信息:
<requestHandler name="/dataimport"
class="org.apache.solr.handler.dataimport.DataImportHandler">
<lst name="defaults">
<str name="config">data-config.xml</str>
</lst>
</requestHandler>
④修改D:\solr-home\core2\conf下managed-schema文件,添加IK分词器,在文末的</schema> 上添加:
<fieldType name="text_ik" class="solr.TextField">
<analyzer type="index" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
<analyzer type="query" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>
⑤自定义solr的字段,在第四步后面添加:
<!-- fieldType:可以自己定义type的类型,比如中文的分词器IKAnalyzer
field域:主要是用于数据存取的域,里面使用key,value存储数据。
name:类似于key,存储的文本名称
type:存储的数据类型
indexed:是否建立索引,也就是说能不能使用该域进行搜索查找。
stored:是否存储数据,一般对象的基本属性是存储的
multiValued:可以是多个值,和数组基本类似,格式[]-->
<field name="release_time" type="string" indexed="true" stored="true" />
<field name="viewed" type="string" indexed="true" stored="true" />
<field name="content" type="text_ik" indexed="true" stored="true" />
<field name="like_number" type="string" indexed="true" stored="true" />
<field name="chs_title" type="text_ik" indexed="true" stored="true" />
<field name="chs_author" type="text_ik" indexed="true" stored="true" />
<field name="status" type="string" indexed="true" stored="true" />
<field name="ik_keywords" type="text_ik" indexed="true" stored="false" required="true" multiValued="true"/>
<!-- copyField:复制域,主要是将指定的数据复制到某一个域对象中,以至于一个域可以存储多个域的信息,这样就方便构建默认搜索域就行搜索,非常的方便。-->
<copyField source="content" dest="ik_keywords"/>
<copyField source="chs_title" dest="ik_keywords"/>
<copyField source="chs_author" dest="ik_keywords"/>
注释:
文档中默认配置了:<field name="id" type="string" indexed="true" stored="true" required="true" multiValued="false" />
每一个向solr添加的对象都需要一个唯一的id,这样可以保证每一份数据的唯一性(所以不需要自己再配主键ID)
⑥重启tomcat 导入数据
⑦查询数据
SpringBoot整合Solr:https://blog.csdn.net/kelly921011/article/details/102640362