Solr介绍
-
什么是Solr
Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Get操作提出查找请求,并得到XML格式的返回结果。
Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器。
Solr比lucene提供了更多的查询语句,而且它可扩展、可配置,同时它对lucene的性能进行了优化。
Solr是如何实现全文检索的呢?
索引流程:solr客户端(浏览器、java程序)可以向solr服务端发送POST请求,请求内容是包含Field等信息的一个xml文档,通过该文档,solr实现对索引的维护(增删改)
搜索流程:solr客户端(浏览器、java程序)可以向solr服务端发送GET请求,solr服务器返回一个xml/json文档。
-
Solr与lucene的区别
Lucene是一个全文检索引擎工具包,它只是一个jar包,不能独立运行,对外提供服务。
Solr是一个全文检索服务器,它可以单独运行在servlet容器,可以单独对外提供搜索和索引功能。Solr比lucene在开发全文检索功能时,更快捷、更方便。
Solr的安装与配置
-
下载Solr
Solr和lucene的版本是同步更新的,最新的版本是7.1.0/
下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/solr/ 下载版本:7.1.0
1. src.tgz:带src表示是带源码文件的压缩包,无src是已经编译过的压缩包
2. .tgz:Linux相关操作系统使用的压缩包
3. .zip:Windows操作系统使用的压缩包
-
启动Solr
安装完毕后在文件夹bin目录下启动cmd输入“solr start” 命令启动Solr
访问地址:http://localhost:8983/solr/..
访问成功如下图:
-
Tomcat安装运行环境
要求: jdk:1.8及以上 Solr:7.1 Web服务器:tomcat 8(改端口9080“为了和之后的Java服务器区分”)
- 操作步骤:
成功页面:
Dashboard:仪表盘,显示了该Solr实例开始启动运行的时间、版本、系统资源、jvm等信息。
logging:显示solr运行出现的异常或错误
Core Admin:Solr Core的管理界面。在这里可以添加SolrCore实例。(主要有Add Core(添加核心), Unload(卸载核心),Rename(重命名核心),Reload(重新加载核心),Optimize(优化索引库) Add Core是添加core:主要是在instanceDir对应的文件夹里生成一个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)
Thead Dump:显示Solr Server中当前活跃线程信息,同时也可以跟踪线程运行栈信息。
Core selector:需要在Core Admin里添加了core后才有可选项。
选择一个SolrCore进行详细操作,如下:
-
Solr core的配置(创建)
Solr导入数据
- 查看Core:
通过此查看创建的guo_core。则说明没有相关配置文件,需要添加并修改。
- DataImport导入数据:
该功能是将数据库中数据通过Sql语句方式导入到Solr索引库中。
第一步:添加jar包
D:\guoweixin\solr\solr-7.1.0\dist 下的jar
第二步:配置中文分词器
managed-schema文件详解:
dynamicField详解(199行):
uniqueKey:
copyField:
fieldType:
第三步:修改solrconfig.xml文件
第四步:创建data-config.xml
<?xml version="1.0" encoding="UTF-8" ?> <dataConfig> <dataSource type="JdbcDataSource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/solr" user="root" password="root"/> <document> <entity name="products" query="select pid,pname,catalog_name,price,description,picture from products "> <field column="pid" name="id"/> <field column="pname" name="prod_pname"/> <field column="catalog_name" name="prod_catalog_name"/> <field column="price" name="prod_price"/> <field column="description" name="prod_description"/> <field column="picture" name="prod_picture"/> </entity> </document> </dataConfig> |
第五步:定义域
<field name="prod_pname" type="solr_cnAnalyzer" indexed="true" stored="true" required="true" /> <field name="prod_catalog_name" type="string" indexed="true" stored="true" required="true" /> <field name="prod_price" type="pdouble" indexed="true" stored="true" required="true" /> <field name="prod_description" type="solr_cnAnalyzer" indexed="true" stored="true" required="true" /> <field name="prod_picture" type="string" indexed="false" stored="true" required="true" /> |
其中prod_pname需要模糊查询(中文分词),故将其类型改为solr_cnAnalyzer |
第五步:启动服务
查询描述
q 查询的关键字,此参数最为重要,例如,q=id:1,默认为q=*:*,
fl 指定返回(回显)哪些字段,用逗号或空格分隔,注意:字段区分大小写,例如,fl= id,title,sort
start 返回结果的第几条记录开始,一般分页用,默认0开始
rows 指定返回结果最多有多少条记录,默认值为 10,配合start实现分页
sort 排序方式,例如id desc 表示按照 “id” 降序
wt (writer type)指定输出格式,有 xml, json等
fq (filter query)过虑查询,提供一个可选的筛选器查询。返回在q查询符合结果中同时符合的fq条件的查询结果,例如:q=id:1&fq=sort:[1 TO 5],找关键字id为1 的,并且sort是1到5之间的。
df 默认的查询字段,一般默认指定。
h1 是否高亮。
客户端查询语法:
Solr的安装和介绍就先到这里,等接下来有时间会把后端的代码实现也传上来,希望可以帮助有需要的兄弟。