内容简介:最近因项目需要一个全文搜索引擎服务, 在考察了Lucene及Solr后,我们选择了Solr. 本文简要记录了基于Solr搭建一个企业搜索服务器的过程.网上的资料太多千篇一律,也可能版本不同,总之在参照的时候并不顺利,因此在通过官网的介绍并逐步实践的基础上,我们整理了这个文档,希望能帮助到有类似需求的大家.后记: 经过以上步骤后,我们的Solr应用就基本结束. 不过因Solr作为一个企业级的搜索产品,功能原不止于此,文中并没有涵盖完全Solr的操作, 如关于增量索引设置问题,各位如果有需要可以在此基础上继续
最近因项目需要一个全文搜索引擎服务, 在考察了Lucene及Solr后,我们选择了Solr. 本文简要记录了基于Solr搭建一个企业搜索服务器的过程.网上的资料太多千篇一律,也可能版本不同,总之在参照的时候并不顺利,因此在通过官网的介绍并逐步实践的基础上,我们整理了这个文档,希望能帮助到有类似需求的大家.
- Solr 介绍
- Solr 是一个基于Lucene技术的企业级搜索应用服务器, 运行在JVM环境中, 对外以类似webservice http模式提供接口.可简单的通过配置的形式实现一个企业级的搜索服务.
- 安装与部署
-
JDK环境配置
安装配置jdk, 并设置 JAVA_HOME 环境变量,
ps: 楼主最开始使用的是1.8的版本, 也挺正常, 但后面因为在尝试导入sqlserver 2014数据库数据的时候,可能是楼主下载的mssql-jdbc.jar 包比较新的原因, 总是出现类似版本过低的提示, 便直接升级到了最新的jdk11版本.
- 下载Solr包及配置运行环境
- 去Solr官网下载程序包 ,楼主下载了最新的7.5版本 http://www.apache.org/dyn/closer.lua/lucene/solr/7.5.0
- Solr 本身内置了Severlet, 故可直接运行, 当然如果不习惯,也可以将其挂在类似 tomcat 等其他Serverlet 容器下运行.
-
将下载的Solr 包解压到合适位置后, 在其bin路径下, 执行 solr start 后, 如出现下面的提示则表示环境正常了.
此时便可通过浏览器访问 http://localhost:8983, 一切正常的话便可预见类似下面的管理中心界面
若出现错误, 通常可能为jdk环境没有配置正常,可通过提示对应处理. - 创建索引库 Core
- 在 server\solr 目录下,新建文件夹,本文以创建一个用于搜索物料产品的索引库为例. 姑且取名为 icvip 为例, 并默认配置[ server\solr\configsets\_default\conf ] 复制到此路径下.
-
在管理中心界面中,选择左侧的 Core Admin 菜单,创建一个新的 Core. 本处将name设置为icvip,instanceDir 设置为icvip, 注意下面的提示:instanceDir 和 DataDir 一定要在此步骤之前存在,这也是我们为何要在界面创建之前先做第一步的原因.参考截图如下
-
正常添加后, 我们便可以对这个索引库做操作了,如导入数据,分词器,上传文档,查询测试....参见如下截图中的左边菜单
-
中文分词器ik-analyzer
为了更好的支持中文分词,我们此处引入ik分词器.
- 可通过maven仓库下载最新的ik分词器的jar包. https://search.maven.org/search?q=com.github.magese , 并将其放在server\solr-webapp\webapp\WEB-INF\lib 目录下.
- 修改server\solr\icvip\conf\managed-schema配置,添加一个fieldType启用ik分词器.
<fieldType name="text_ik" class="solr.TextField"> <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/> </fieldType>
-
重启Solr服务,并尝试在 Analysis 中选择 text_ik 测试是否生效,如下所示
- 从数据库导入数据源
-
有了以上的配置后, 我们的搜索库已经准备好了,接下来就该往其添加索引数据了.当然你可以添加其支持的各种数据格式, 如 documents 菜单下的 Document Type 所列.本处介绍另外一种形式的数据源,即直接从数据库导入数据.在正式导入之前,我们先简单介绍一下导入数据的内容,本文以一个物料及其规格参数列表为例, 其关系为 1物料:n规格参数 , 数据量大概为 物料表 638 万条, 参数规格表 7169万条, 数据库文件约为15G左右.
- 前文已说, Solr 是基于 java 平台下的产物, 需要下载对应的驱动来支持数据库连接,其中 sqlserver 可通过 https://docs.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-2017 下载对应的jar包,mysql 对应下载地址为 https://www.mysql.com/products/connector/ .
-
在Core目录下,新建 lib 文件夹,将solr-dataimporthandler 和 数据库连接驱动 jar包拷贝到此目录.
-
添加Dataimport 支持, server\solr\icvip\conf\solrconfig.xml 添加 requestHandler , 注意如果有其他的 name=”/dataimport” 节点,请将其移除.,其中的 <str name=”config”>节点即为导入数据源的配置文件
<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文件, 如下所示
<?xml version="1.0" encoding="UTF-8"?> <dataConfig> <!--mysql数据源--> <!--<dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/icvip_material?characterEncoding=utf8&useSSL=false" user="root" password="123456"/> --> <!--sqlserver 数据源--> <dataSource type="JdbcDataSource" driver="com.microsoft.sqlserver.jdbc.SQLServerDriver" url="jdbc:sqlserver://localhost:1433;DatabaseName=icvip_material" user="sa" password="123456"/> <document name="Products"> <!--产品实体--> <entity name="Product" dataSource="dataSource" pk="ProductId" query="SELECT * FROM Product"> <field column="ProductId" name="ProductId" /> <field column="CategoryId" name="CategoryId" /> <field column="PN" name="PN" /> <field column="Brand" name="Brand" /> <field column="Describe" name="Describe" /> <field column="ImageBigUrl" name="ImageBigUrl" /> <field column="ImageSmallUrl" name="ImageSmallUrl" /> <field column="DataSheetURL" name="DataSheetURL" /> <field column="Series" name="Series" /> <field column="ProductFamily" name="ProductFamily" /> <field column="CategoryName" name="CategoryName" /> <field column="PageUrl" name="PageUrl" /> <!--产品规格实体,关系为1产品:n产品规格--> <entity name="Product_Spec" pk="SpecificationsId" query="SELECT [Key],[Value] FROM specifications WHERE ProductId='${Product.ProductId}'"> <field column="Key" name="ProSpecKey" /> <field column="Value" name="ProSpecValue" /> </entity> </entity> </document> </dataConfig>
-
配置server\solr\icvip\conf\managed-schema,以确认使用的分词规则
至于配置的含义,可参考 https://wiki.apache.org/solr/DataImportHandler
-
导入数据,切换到Dataimport 菜单, 选中实体导入. 接下来就是漫长的等待过程....
-
常用查询参数介绍, 重点需要关注 q/ fq/ hl/start/rows 几个参数. 可使用Query菜单进行测试.
后记: 经过以上步骤后,我们的Solr应用就基本结束. 不过因Solr作为一个企业级的搜索产品,功能原不止于此,文中并没有涵盖完全Solr的操作, 如关于增量索引设置问题,各位如果有需要可以在此基础上继续深入研究,附上Solr官网介绍的详细地址. https://wiki.apache.org/solr/
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Python 之构建代理服务器
- 《高性能linux服务器构建实战》
- 使用Freya构建F# Web服务器
- 使用Gulp构建本地开发Web服务器
- 重新思考使用无服务器构建软件的方式
- 利用LXD容器构建共享的GPU服务器
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript高级程序设计:第2版
Nicholas Zakas / 李松峰、曹力 / 人民邮电出版社 / 2010-7 / 89.00元
《JavaScript高级程序设计(第2版)》在上一版基础上进行了大幅度更新和修订,融入了近几年来JavaScript应用发展的最新成果,几乎涵盖了所有需要理解的重要概念和最新的JavaScript应用成果。从颇具深度的JavaScript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)、文档对象模型(DOM)到基于事件的Web脚本......一起来看看 《JavaScript高级程序设计:第2版》 这本书的介绍吧!