搜索技术的引用
select * from t_goods where name like '%关%键%词%'
会导致索引失效,进而全表扫描
什么是solr
solr是用Java编写,运行在Servlet容器的一个独立的全文搜索服务器。Solr采用了Lucene Java搜索库为核心的全文索引和搜索,并具有类似REST的HTTP/XML和JSON的API。solr强大的外部配置功能使得无需进行Java编码,便可以对其进行调整以适应多种类型的应用程序。
安装使用
1.下载solr
官方仓库:https://archive.apache.org/dist/lucene/solr/
(这里用的是7.7.3版本)
2.使用内置Jetty测试启动
(Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境。Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布。开发人员可以将Jetty容器实例化成一个对象,可以迅速为一些独立运行(stand-alone)的Java应用提供网络和web连接)
[root@izuf6i2hwrq3qrn5zdyjhoz bin]# ls
init.d install_solr_service.sh oom_solr.sh post solr solr.cmd solr.in.cmd solr.in.sh
[root@izuf6i2hwrq3qrn5zdyjhoz bin]# ./solr start
打开浏览器,访问地址:http://你的ip:8983/solr/#
3.Tomcat环境运行
需要环境:
- JDK1.8
- tomcat 9.0
找到solr文件夹下的webapp文件
[root@izuf6i2hwrq3qrn5zdyjhoz solr-webapp]# ls
webapp
[root@izuf6i2hwrq3qrn5zdyjhoz solr-webapp]# pwd
/root/software/solr-7.7.3/server/solr-webapp
复制到tomcat下,重命名为solr
[root@izuf6i2hwrq3qrn5zdyjhoz solr]# pwd
/root/tomcat/apache-tomcat-9.0.35/webapps/solr
**(重要)**将solr-7.7.3/server/lib/ext下的所有jar包,以及solr-7.7.3/server/lib/下以metrics开头的jar、gmetric4j-1.0.7.jar复制到apache-tomcat-9.0.35/webapps/solr/WEB-INF/lib下
在WEB-INF中,新建classes文件夹,将solr-7.7.3/server/resources下的log4j2-console.xml、log4j2.xml拷贝进去。
创建Solr CoreAdmin管理
创建slor home目录(solr_home)
[root@izuf6i2hwrq3qrn5zdyjhoz software]# ls
solr-7.7.3 solr-7.7.3.tgz solr_home
拷贝solr-7.7.3/server/solr下所有的文件、文件夹到solr_home目录下
拷贝solr-7.7.3下contrib和dist文件夹到solr_home下
在solr_home下创建core_demo文件夹,并拷贝solr_home\configsets\sample_techproducts_configs\目录下conf文件夹至solr_home\core_demo下
修改solr_home\demo_core\conf\solrconfig.xml文件
修改(添加)tomcat\webapps\solr\WEB-INF中的web.xml文件
其中env-entry-value值为solr_home对应值,即solr home的绝对路径
<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/root/software/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>
-->
启动tomcat,访问http://你的ip:8080/solr/index.html
-
Dashboard:显示该solr实例开始启动运行的时间、版本、系统资源、jvm信息等
-
Logging:显示solr运行出现的异常或错误
-
Core Admin:Solr Core的管理界面,在这里可以添加管理solr core实例。
Add Core是添加core:主要是在对应的文件夹里生成一个core.properties文件
name:给core起的名字;
instanceDir:与我们在配置solr到tomcat里时的solr_home里新建的core文件夹名一致;
dataDir:确认Add Core时,会在new_core目录下生成名为data的文件夹
config:new_core下的conf下的config配置文件(solrconfig.xml)
schema: new_core下的conf下的schema文件(schema.xml) -
java properties:Solr在JVM 运行环境中的属性信息,包括类路径、文件编码、jvm内存设置等信息。可查看到java相关的一些属性的信息
-
Thread Dump:显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
-
**(重点)**Core selector:需要在Core Admin里添加了core后才有可选项
- Analysis:通过此界面可以测试索引分析器和搜索分析器的执行情况
- Dataimport:可以定义数据导入处理器,从关系数据库将数据导入到Solr索引库中。
- Document:通过/update表示更新索引,solr默认根据id(唯一约束)域来更新Document的内容,如果根据id值搜索不到id域则会执行添加操作,如果找到则更新。通过此菜单可以创建索引、更新索引、删除索引等操作
- Query:通过/select执行搜索索引,必须指定“q”查询条件方可搜索。
solr core的配置
在http://你的ip:8080/solr/index.html中添加core_demo
solr导入数据
查看core
Dataimport导入数据:是将数据库中数据通过sql语句方式导入到solr索引库中
-
添加jar包:将solr-7.7.3/dist下的solr-dataimporthandler-7.7.3.jar和solr-dataimporthandler-extras-7.7.3.jar以及solr-7.7.3/contrib/analysis-extras/lucene-libs下的所有包、mysql-connector-java.jar拷贝到webapps/solr/WEB-INF/lib下面
-
配置中文分词器:修改core下面的conf文件夹里的managed-schema文件
在文件的最下面插入中文分词器
<!-- ChineseAnalyzer --> <fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100"> <analyzer type="index"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> <analyzer type="query"> <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/> </analyzer> </fieldType>
-
修改conf文件夹下的solrconfig.xml文件,添加dataimport
<requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler"> <lst name="defaults"> <str name="config">data-config.xml</str> </lst> </requestHandler>
-
创建data-config.xml:作用是数据库连接相关信息,SQL查询以及结果映射对应域中
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://ip:3306/solr_test" user="root" password="***"/> <document> <entity name="tb_solr_1" pk="id" query="select * from tb_solr_1"> <field column="id" name="id"/> <field column="name" name="filename"/> </entity> </document> </dataConfig>
-
定义域,修改managed-schema文件,配置其Field域,在最下端
<field name="filename" type="solr_cnAnalyzer" indexed="true" stored="true" required="true"/>
filename需要模糊查询(中文分词),所以类型为solr_cnAnalyzer
-
启动tomcat,进入core中的Dataimport执行execute
然后进入Query执行Execute Query
至此,数据库连接成功