热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr5.4.0全文检索解决方案

应用场景在百度中搜索“阿凡达”会出来一系列资料,有文本,图片,电影,链接等等,这就是一个搜索引擎实现的
应用场景

在百度中搜索“阿凡达”会出来一系列资料,有文本,图片,电影,链接等等,这就是一个搜索引擎实现的,当然百度有自己的搜索引擎,我们可以不用自己写一个搜索引擎,有现成的比如sorl,lucene,ElasticSearch等等,这里介绍一些solr。

1.概述

1.1 Solr 是什么?

Solr它是一种开放源码的、基于 Lucene Java 的搜索服务器,易于加入到 Web 应用程序中。Solr提供了层面搜索(就是统计)、命中醒目显示并且支持多种输出格式(包括XML/XSLT 和JSON等格式)。它易于安装和配置,而且附带了一个基于HTTP 的管理界面。可以使用 Solr 的表现优异的基本搜索功能,也可以对它进行扩展从而满足企业的需要。

Solr的特性包括:
高级的全文搜索功能
专为高通量的网络流量进行的优化
基于开放接口(XML和HTTP)的标准
综合的HTML管理界面
可伸缩性-能够有效地复制到另外一个Solr搜索服务器
使用XML配置达到灵活性和适配性
可扩展的插件体系

1.2 Lucene 是什么?

Lucene是一个基于Java的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene目前是 Apache Jakarta(雅加达) 家族中的一个开源项目。也是目前最为流行的基于Java开源全文检索工具包。目前已经有很多应用程序的搜索功能是基于Lucene ,比如Eclipse 帮助系统的搜索功能。Lucene能够为文本类型的数据建立索引,所以你只要把你要索引的数据格式转化的文本格式,Lucene 就能对你的文档进行索引和搜索。

1.3 Solr vs Lucene

Solr与Lucene 并不是竞争对立关系,恰恰相反Solr 依存于Lucene,因为Solr底层的核心技术是使用Lucene 来实现的,Solr和Lucene的本质区别有以下三点:搜索服务器,企业级和管理。Lucene本质上是搜索库,不是独立的应用程序,而Solr是。Lucene专注于搜索底层的建设,而Solr专注于企业应用。Lucene不负责支撑搜索服务所必须的管理,而Solr负责。所以说,一句话概括 Solr: Solr是Lucene面向企业搜索应用的扩展。

Solr与Lucene架构图:
这里写图片描述

Solr使用Lucene并且扩展了它!

  • 一个真正的拥有动态字段(Dynamic Field)和唯一键(Unique Key)的数据模式(Data Schema)
  • 对Lucene查询语言的强大扩展!
  • 支持对结果进行动态的分组和过滤
  • 高级的,可配置的文本分析
  • 高度可配置和可扩展的缓存机制
  • 性能优化
  • 支持通过XML进行外部配置
  • 拥有一个管理界面
  • 可监控的日志
  • 支持高速增量式更新(Fast incremental Updates)和快照发布(Snapshot Distribution)

1.4 总结

Lucene是一个全文检索的工具包,它是一堆jar包,不能单独运行,即不能独立对外提供服务。
Solr是一个全文搜索服务器,它可以独立运行,它能独立对外提供搜索和索引服务。
使用lucene开发站内搜索的话,程序员编写的代码量会比较大,而且在搜索和索引流程得考虑他的性能。
使用solr开发站内搜索的话,程序员只需编写少量的代码,快速的搭建出来站内搜索功能。而且性能方面不需要程序员去考虑,solr对它已经进行了处理。

下图展示了solr的使用组织结构:

这里写图片描述

Solr也是Apache下一个项目,它是使用java开发的,它是基于Lucene的全文搜索服务器。

Solr如何进行索引和搜索:

索引:客户端(可以是浏览器可以是java程序)发送post请求到solr服务器,发给solr服务器一个文档(xml、json),就可以进行一个添加索引删除索引、修改索引的操作。

搜索:客户端(可以是浏览器可以是java程序)发送get请求到solr服务器,请求solr服务器给它响应一个结果文档(xml、json),程序员拿到这些文档就可以对其进行解析。进行视图渲染。

2. 系统信息及材料准备

2.1 系统信息

  • 宿主机操作系统:windows 7+8G
  • 宿主机ip:192.168.117.66
  • 虚拟机版本:VMware® Workstation 11.0.0 build-2305329
  • 操作系统:CentOS-6.6-x86_64
  • JDK版本:jdk-7u79-linux-x64
  • Tomcat版本:tomcat7.0.67
  • Solr版本:solr5.4.0
  • 虚拟机ip:192.168.199.23
  • 虚拟机名:solr5

2.2 资源下载

2.2.1 jdk1.7下载

下载链接
进入链接后,选中Accept License Agreement,下载jdk-7u79-linux-x64.tar.gz。

这里写图片描述

2.2.2 tomcat7下载

下载链接

这里写图片描述

2.2.3 solr5.4.0下载

下载链接 进入solr5.4.0文件夹。

这里写图片描述

这里写图片描述

这样,我们所需要的solr环境搭建的组件都下载完毕了,下面着手安装与配置!

3. Solr单机版搭建

3.1 JDK安装

1. 卸载原有JDK# yum remove java

这里写图片描述

2.将下载的JDK安装包,拷贝到【/usr/java】目录下,进行解压缩,把解压缩后的文件夹名改为jdk1.7# cd /usr/java# tar -xzvf jdk-7u79-linux-x64.tar.gz

3. 修改profile配置文件。# vim /etc/profile

4.在末尾加上如下3行配置:export JAVA_HOME=/usr/java/jdk1.7export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATH

这里写图片描述

5. 使修改的配置文件生效:# source /etc/profile

6. 验证:# java -version

这里写图片描述

3.2 Tomcat安装

上传apache-tomcat-7.0.67.tar.gz到服务器的【/usr/local/solr/】目录下并解压重命名为tomcat7,使用命令给tomcat的bin目录下的脚本赋予可执行权限。

这里写图片描述

# chmod 777 /usr/local/solr/tomcat7/bin/*

3.3 Solr安装

将solr-5.4.0.tgz下载下来,上传到服务器的【/usr/local/solr/】目录下并重命名为sorl5,此时【/usr/local/solr/】目录下应该存在两个文件夹,tomcat7和solr5。

这里写图片描述

3.4 Solr配置

  • 将【/usr/local/solr/solr5/server/solr-webapp】目录下的webapp文件夹拷贝到【/usr/local/solr/tomcat7/webapps】目录下,并修改文件夹名称为solr。
  • 复制【/usr/local/solr/solr5/server/】目录下的solr文件夹,到【/usr/local/solr/】目录下,并改名为solrhome。

这里写图片描述

这里写图片描述

  • 修改【/usr/local/solr/tomcat7/webapps/solr/WEB-INF/web.xml】文件:

这里写图片描述

打开web.xml,修改内容为:(注:如果是windows,地址为绝对路径,如D:/solr/solrhome,不必用windows下的反斜线)

这里写图片描述

<env-entry>
<env-entry-name>solr/home</env-entry-name>
<env-entry-value>/usr/local/solr/solrhome</env-entry-value>
<env-entry-type>java.lang.String</env-entry-type>
</env-entry>

  • 复制【/usr/local/solr/solr5/server/lib/ext】下的所有jar包【/usr/local/solr/tomcat7/webapps/solr/WEB-INF/lib】目录中。

命令如下&#xff1a;

# cp -r /usr/local/solr/solr5/server//lib/ext/* /usr/local/solr/tomcat7/webapps/solr/WEB-INF/lib/

  • 在【/usr/local/solr/tomcat7/webapps/solr/Web-INF】目录下创建文件夹classes&#xff0c;复制【/usr/local/solr/solr5/server/resources/log4j.properties】文件到【/usr/local/solr/tomcat7/webapps/solr/WEB-INF/classes】目录下。

命令如下&#xff1a;

# cp -r /usr/local/solr/solr5/server/resources/log4j.properties /usr/local/solr/tomcat7/webapps/solr/WEB-INF/classes/

  • 在【/usr/local/solr/solrhome/】目录下&#xff0c;创建solrcore&#xff0c;取名为collection1&#xff0c;将【/usr/local/solr/solrhome/configsets/data_driven_schema_configs】目录下的conf文件夹全部复制到【/usr/local/solr/solrhome/collection1】目录下。

这里写图片描述

这里写图片描述

  • 启动tomcat&#xff0c;访问http://192.168.199.23:8080/solr/admin.html即可。

注&#xff1a;这里如果访问地址为http://192.168.199.23:8080/solr会报404的错误&#xff0c;需要在地址后面加上admin.html&#xff0c;这是solr5特有的&#xff0c;千万注意。

这里写图片描述

这里写图片描述

4. Solr详解

4.1 SolrCore

4.1.1 SolrHome和SolrCore

SolrHome是Solr运行的主目录&#xff0c;该目录中包括了多个SolrCore目录。SolrCore目录中包含了运行Solr实例所有的配置文件和数据文件&#xff0c;Solr实例就是SolrCore。

一个SolrHome可以包括多个SolrCore&#xff08;Solr实例&#xff09;&#xff0c;每个SolrCore提供单独的搜索和索引服务。

4.1.2目录结构

SolrHome目录&#xff1a;

这里写图片描述

SolrCore目录&#xff1a;

这里写图片描述

4.1.3创建SolrCore

创建SolrCore先要创建SolrHome。在solr解压包下solr5/server/solr文件夹就是一个标准的SolrHome。

  • 拷贝solr5解压包下solr5/server/solr文件夹。

这里写图片描述

  • 复制该文件夹到本地的一个目录&#xff0c;把文件名称改为solrhome。

注&#xff1a;改名不是必须的&#xff0c;只是为了便于理解。

这里写图片描述

  • 打开SolrHome目录

这里写图片描述

  • SolrCore创建成功。

4.1.4多solrcore配置

配置多SolrCore的好处&#xff1a;

  • 一个solr工程对外通过SorlCore提供服务&#xff0c;每个SolrCore相当于一个数据库&#xff0c;这个功能就相当于一个mysql可以运行多个数据库。
  • 将索引数据分SolrCore存储&#xff0c;方便对索引数据管理维护。
  • SolrCloud集群需要使用多core。

复制原来的core目录为collection2&#xff0c;目录结构如下&#xff1a;

这里写图片描述

这里写图片描述

修改collection2下的core.properties&#xff0c;如下&#xff1a;

这里写图片描述

演示多core的使用&#xff0c;在collection1和collection2中分别创建索引、搜索索引&#xff0c;可以自己尝试。

这里写图片描述

5. 配置分词器

Solr自带的分词器并不能很好的满足我们的实际业务需求&#xff0c;比如对中文的分词支持的不够完善&#xff0c;如下&#xff1a;

这里写图片描述

可以看到当输入一个经典的例子语句”乒乓球拍卖完了”的时候分词效果是将每个文字都拆分开了&#xff0c;这样在最后用户检索的时候会服务器会响应大量的垃圾信息&#xff0c;用户体验大大下降。所以我配置自己的分词器。具体步骤如下&#xff1a;

所需jar包以及配置文件下载地址

  • 将上面提供的后面4个jar包&#xff0c;上传到【/usr/local/solr/tomcat7/webapps/solr/WEB-INF/lib/】下。
  • 把上面提供的2个文件&#xff0c;上传到【/usr/local/solr/tomcat7/webapps/solr/WEB-INF/classes/】目录下。
  • 修改&#xff1a;/usr/local/solr/solrhome/collection1/conf/managed-schema&#xff0c;添加如下配置&#xff1a;

这里写图片描述


<fieldType name&#61;"text_ik" class&#61;"solr.TextField"><analyzer type&#61;"index"><tokenizer class&#61;"org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart&#61;"false"/>analyzer><analyzer type&#61;"query"><tokenizer class&#61;"org.apache.lucene.analysis.ik.IKTokenizerFactory" useSmart&#61;"false"/>analyzer>fieldType>

然后重启tomcat&#xff0c;在analysis中选择text_ik&#xff0c;输入一段中文&#xff0c;查看分词效果。

这里写图片描述

可以看到分词效果明细提升&#xff0c;如果有其他业务需要也可以继续对IK的词库进行相应的扩充。




推荐阅读
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了互联网思维中的三个段子,涵盖了餐饮行业、淘品牌和创业企业的案例。通过这些案例,探讨了互联网思维的九大分类和十九条法则。其中包括雕爷牛腩餐厅的成功经验,三只松鼠淘品牌的包装策略以及一家创业企业的销售额增长情况。这些案例展示了互联网思维在不同领域的应用和成功之道。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • Elasticsearch:Pinyin分词器
    Elastic的Medcl提供了一种搜索Pinyin搜索的方法。拼音搜索在很多的应用场景中都有被用到。比如在百度搜索中,我们使用拼音就可以出现汉字:对于我们中国人来说,拼音搜索也是 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Lucene系列四:Lucene提供的分词器、IKAnalyze中文分词器集成、扩展 IKAnalyzer的停用词和新词
    一、Lucene提供的分词器StandardAnalyzer和SmartChineseAnalyzer1.新建一个测试Lucene提供的分词器的maven项目LuceneAnal ... [详细]
  • 1.0为什么要做这个博客站?  在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了。而且下次再点击这个书签时,可能就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效。这样一来,也就不方便 ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 开发笔记:使用JavaScript解决网页图片拉伸问题
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了使用JavaScript解决网页图片拉伸问题相关的知识,希望对你有一定的参考价值。 ... [详细]
  • es的分布式原理?es是如何实现分布式的?
    Elasticsearch设计的理念是分布式搜索引擎,底层其实是基于lucene。核心思 ... [详细]
  • ES基本原理名词解释In-memorybuffer:ES内存缓冲区,新建的document写入的地方document:索引和搜索的 ... [详细]
  • mysql+全文检索设计,基于sphinx+mysql全文检索架构设计.doc
    基于sphinxmysql全文检索架构设计.doc还剩2页未读,继续阅读下载文档到电脑,马上远离加班熬夜!亲,喜欢就下载吧& ... [详细]
author-avatar
我爱你可你不懂_516
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有