使用 solr 搭建自己的搜索引擎 – 热爱改变生活
我的GitHub GitHub |     登录
  • If you can't fly, then run; if you can't run, then walk; if you can't walk, then crawl
  • but whatever you do, you have to keep moving forward。
  • “你骗得了我有什么用,这是你自己的人生”
  • 曾有伤心之地,入梦如听 此歌

使用 solr 搭建自己的搜索引擎

搜索引擎 sinvader 2172℃ 0评论

(转)Python 爬虫进阶三之 Scrapy 框架安装配置
一个简单的爬虫—电影天堂爬虫
从这两篇文章开始,我其实只是想要练习一下 python,写爬虫玩玩,想着下电影时候直接一搜,就直接有下载地址了,后来爬了一些数据之后发现,数据库中使用 Like 搜索的时候那个搜索的速度真是惨不忍睹不忍直视啊,有时候 4、5 秒都出不来结果,还以为网页代码挂了呢,后来为搜索的字段添加了索引也不行,还是比较慢,于是只能使用自建搜索引擎了

一开始考虑的搜索引擎其实还有其他的,但是因为我阿里云的服务器是 windows 的,并且我对 java 比较熟,同时 solr 可以方便的导入 mysql 的数据,最后选择了 solr 来作为我尝试的第一个搜索引擎。

安装与部署

参考这篇文章:window 环境下将 solr6.3 部署到 tomcat 中 或者查看截图
solrinstallscreenshot

其实还是遇到了一些奇奇怪怪的问题的,但是因为我服务器是 windows server 2008,对各位看官不具有普适性,就不说了。这里遇到问题,拿现象去 google 就好了,还是挺容易配置好的
完成这步之后,你打开 http://127.0.0.1:8080/solr/index.html 这个地址应该可以看到 solr 的界面了

导入 MySql 数据

我导入的时候主要是参考了 这篇 博文,但是在参考他的过程中发现有些东西对我的服务器不是很适应,所以做了修改,到时候我会注明的。

步骤 1:

在 webapps 中 solrhome 下新建一个文件夹名字叫做 mynode(名字不固定,可以随便取,但是这个名字在后面的配置中会有所关联。)然后在 mynode 文件下新建一个名字叫做 conf 的文件夹(这个文件名字最后不要改。)然后把官网下下来的 solr 项目中 solr-6.0.0\server\solr\configsets\data_driven_schema_configs\conf 下的所有东西复制到 conf 中去。(注意不要复制错!)最后把 solr-6.0\solr-6.0.0\example\example-DIH\solr\db\conf 下的 admin-extra.html, admin-extra.menu-bottom.html ,admin-extra.menu-top.html 三个文件也复制到 conf 中去。

步骤 2:

把 mysql 所需的 jar 包和 solr-6.0\solr-6.0.0\dist 下的 solr-dataimporthandler-6.0.0.jar 和 solr-dataimporthandler-extras-6.0.0.jar 都复制到项目 WEB-INF\lib 下。然后在 solrconfig.xml 文件中加入(就是把 WEB-INF\lib 里面的 jar 包配置到项目中,我这里用的是绝对地址。这段代码大约在 solrconfig.xml 的 70 多行处,前面有一堆类似的代码。)

步骤 3:

在 MYSQL 中新建一张表。我这里用的是 Navicat 管理工具进行创建的。这里的表名是 goods。字段如下图所示:

步骤 4:

在 solrconfig.xml 的  <requestHandler name=”/select” class=”solr.SearchHandler”> 之上添加

 <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
   <lst name="defaults">
   <str name="config">data-config.xml</str>
   </lst>
  </requestHandler>

然后在 conf 下新建 data-config.xml 文件。里面内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<dataConfig>
 <dataSource name="source1" type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solrdata" user="root" password="220316" batchSize="-1" />
  <document>
 <entity name="goods" pk="id" dataSource="source1" 
       query="select * from goods"
       deltaImportQuery="select * from goods where id='${dih.delta.id}'"
       deltaQuery="select id from goods where updateTime> '${dataimporter.last_index_time}'">
    <field column="id" name="id"/>
    <field column="name" name="name"/>
      <field column="number" name="number"/>
      <field column="updateTime" name="updateTime"/>
    </entity>
  </document>
</dataConfig>

 

在这里我去掉了 deltaQuery,所以不能增量添加了

dataSource 是数据库数据源(也就是数据库名称),entity 中的 name 是表名,剩下的都是一些字段名

说明:

dataSource 是数据库数据源(也就是数据库名称)。Entity 就是一张表对应的实体,pk 是主键,query 是查询语句。Field 对应一个字段,column 是数据库里的 column 名,后面的 name 属性对应着 Solr 的 Filed 的名字。其中 solrdata 是数据库名,goods 是表名。

其中 deltaQuery 是增量索引,原理是从数据库中根据 deltaQuery 指定的 SQL 语句查询出所有需要增量导入的数据的 ID 号。然后根据 deltaImportQuery 指定的 SQL 语句返回所有这些 ID 的数据,即为这次增量导入所要处理的数据。核心思想是:通过内置变量“${dih.delta.id}”和 “${dataimporter.last_index_time}”来记录本次要索引的 id 和最近一次索引的时间。

最后在 conf 文件下的 managed-schema 配置 field 信息:

 <field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
 <field name="name" type="string" indexed="true" stored="false"/>
 <field name="number" type="int" indexed="true" stored="false"/>
 <field name="updateTime" type="date" indexed="true" stored="true" />
 <field name="_version_" type="long" indexed="true" stored="false"/>
 <field name="_root_" type="string" indexed="true" stored="false" docValues="false" />
 <field name="_text_" type="text_general" indexed="true" stored="false" multiValued="true"/>

这里的每一行都代表一个字段

其中 id,name,number,updateTime 是上面提到的数据库字段。下面三个 field 是系统本身的不能删除,否则会运行错误。

步骤 5:

 

启动 tomcat,并在 URL 中输入 http://127.0.0.1:8080/solr/index.html 路径。选择 Core admin 输入如下设置:

设置好之后,点击 Add Core 按钮,进行设置,设置成功后,再 core Selector 选择刚刚添加的 core。

如果 Add Core 的时候出错,那么首先要检查里面填写的文件的名称在文件夹中是否存在,如果检查了都存在而且内容也正确,那么就换另一种办法,使用命令行来创建
首先找到 solr 的 bin 目录,cmd 中 cd 到这个目录

solr create -c xxx -p 8080

用这个命令在创建一个新的 solr 项目,其中 xxx 是创建的名称,-p 后面是端口
这个时候要把 tomcat 中对 solr 的账号密码控制给去掉,参考: 点击打开 , 删除第一步的内容即可(如果没有账号密码可以忽略)

选择刚刚添加的 goods 实体进行索引操作:我们这儿可以选择 full-import 或者 delta-import(增量索引),选择增量索引需要把 clean 的勾给去掉,不然会清除之前的,增量的索引的初衷是对新增或者修改的记录重新索引,会追加到原有的索引文件当中。当我们选择 full-import 的时候,最好就是把原有的索引文件给清空重新索引。

索引成功如下如所示:

使用 query 进行 测试 ,输入 sa 查出了 sa

数据库中的数据如下图所示:

其他

我总结了一下,其实只要修改其中的三个文件就可以创建一个新的 solr 项目了
这三个文件分别是:data-config.xml、managed-schema、solrconfig.xml
data-config.xml 这个文件用来告诉 solr 我的数据从哪里来,所以配置的是数据库的东西
managed-schema 这个文件用来配置字段,告诉 solr 要导入那些字段,字段的 type 分别是什么,如:
solrconfig.xml 这个文件用来配置这个

<requesthandler name="/dataimport" class="solr.DataImportHandler">
 <lst name="defaults">
 <str name="config">data-config.xml</str>
 </lst>
</requesthandler>

告诉 solr 用哪个文件来作为配置项
所以如果一个可以用之后,只要复制这个项目,将这个三个文件根据对应的数据库进行修改之后,即可成为另外一个项目使用
在复制之后,需要删除 data\index 下面的所有文件,这个文件夹里面是所有文件,要删除之后重新生成
我把我配置好的打包了一个:
moviedata
配置了之后记得修改那三个文件就好,对了如果要改名字记得改文件夹和 core.properties 中的

¥ 有帮助么?打赏一下~

转载请注明:热爱改变生活.cn » 使用 solr 搭建自己的搜索引擎


本博客只要没有注明“转”,那么均为原创。 转载请注明链接:sumile.cn » 使用 solr 搭建自己的搜索引擎

喜欢 (0)
发表我的评论
取消评论
表情

如需邮件形式接收回复,请注册登录

Hi,你需要填写昵称和邮箱~

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址