• Solr学习笔记(1)—— Solr入门


      

     一:概念

      Solr是可扩展的、开箱即用的企业级搜索引擎,用来搜索大规模文本数据并根据相关度排序返回结果。

        1:可扩展——Solr通过集群中多台服务器的分布式运行实现扩展。

        2:开箱即用——Solr是开源的,易于安装和配置,并提供预先配置好的示例服务器,方便上手。

        3:为搜索优化——Solr速度很快,以亚秒级速度执行复杂查询,往往只需花费几十毫秒。

        4:大规模文档——Solr可以用以处理包含百万级文档的索引。

        5:以文本为中心

        6:根据相关度排序——Solr根据文档与用户查询的相关程度对文档进行排序,并以此排序返回结果。

     二:搜索引擎适用场景

       1:以文本为中心

       2:读主导

       3:面向文档

       4:灵活的模式(不像关系型数据库那样需要格式化数据,同一份索引可以包含不同的字段)

       5:处理大数据量

      三:Solr和Lucene的比较

      Lucene是一个开放源代码的全文检索引擎工具包,即它不是一个完整的全文检索引擎,而是一个全文检索引擎的架构,提供了完整的查询引擎和索引引擎,部分文本分析引擎(英文与德文两种西方语言)。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。

      Solr是一个高性能,采用Java5开发,基于Lucene的全文搜索服务器。同时对其进行了扩展,提供了比Lucene更为丰富的查询语言,同时实现了可配置(schema.xml文件、复制字段、动态字段)、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面,是一款非常优秀的全文搜索引擎。它对外提供类似于Web-service的API接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的XML文件,生成索引;也可以通过Http Solr Get操作提出查找请求,并得到XML格式的返回结果。

      注:Solr基于已有的XML、JSON和HTTP标准,提供简单的类REST风格的服务,由于Solr并没有严格遵守所有的REST原则,因此要避免为Solr基于HTTP的API打上REST的标记,例如:在Solr中,删除文档适用HTTP的POST方法,而不是用HTTP的DELETE方法。

      

      四:Solr的三个主要核心(子系统)

      1:文档管理

      2:查询处理

      3:文本分析

        Solr的每个子系统都是由模块化的 “管道” 构成的,通过插件的方式实现新功能。这意味着,没有必要推翻Solr的整个查询处理引擎,只需要在已有管道中介入新的搜索构件即可。这使得Solr的核心功能易于扩展,并能根据特定应用需求实现定制。

      五:Solr的可伸缩性

      Lucene是一个执行速度相当快的搜索类库,Solr汲取了Lucene速度方面的所有优点。但是无论Lucene有多快,由于CPU的IO限制,单台服务器终会达到来自不同用户的并发请求的处理上限。

      实现伸缩性的方法:

        1:Solr提供灵活的缓存管理功能,帮助服务器重用运算量大的数据扩容。(关于缓存后续再讲)

        2:Solr可以通过增加服务器实现增容(查询吞吐量的扩容、文档索引量的扩容)

      如果在三台服务器上复制索引,每秒查询数量会变成查询的三倍,因为每台服务器只用处理三分之一的查询请求。在现实中,完美的线性伸缩性很难实现,因此,增加三台服务器可能会比一台服务器增速2.5倍。

      注:关于硬件:Solr的确可以运行在虚拟机硬件上,但是搜索是IO和内存密集型应用。因此,首先应该考虑在高性能磁盘(如固态硬盘SSD非常理想)的高端硬件上部署Solr。

      六:Solr的容错性

      假设索引有4个分片,托管分片2的服务器断电了。这时,Solr无法继续索引文档和提供查询服务,搜索引擎基本就宕机了。为了避免这种情况,需要为每个分片添加副本。当分片2发生故障时,Solr可以启用副本来索引和处理查询,Solr集群能够保持联机状态。这种情况下故障虽然不会影响索引和查询,但由于少了一个处理请求的服务器,可能会降低速度。

      

      七:Solr功能概述

        用户体验功能

        1:分页与排序

        2:分面

        3:自动建议

        4:拼写检查

        5:搜索结果高亮

        6:地理空间搜索

        

        数据建模功能

        1:结果分组 / 字段折叠

        2:灵活的查询语法

        3:JOIN连接

        4:文档聚类

        5:支持各种文档格式,如PDF和Word

        6:从关系型数据库导入数据DIH

        Solr4以上新功能

        1:近实时搜索

        2:原子更新与乐观并发

          原子更新:原子更新功能允许客户端应用在已有的文档上进行添加、更新、删除和对字段的增值,而且无需重新发送整个文档。

          solr支持三种类型的原子更新:

            set - to set a field.  对指定的field,修改其为指定的值(也可以是Null)

            add - to add to a multi-valued field.  添加一个多值字段。

            inc - to increment a field.  对指定的数值型field,增加(在原有的数值上相加)指定的数值。

          乐观并发:solr使用特殊的_version_版本字段来确保文档的安全更新。对于两个用户同事更改同一个文档的情况,后提交更改的用户将会获得一个过时的版本字段,所以会更新失败。例如:A用户和B用户同时修改_version_版本号为1的文档,当A用户修改完毕提交,将版本号修改为2,那么B用户提交更改时候获取的版本号1已经过期,所以更新会失败。

        3:实时GET功能

        4:使用事务日志实现写持续性

        5:支持Solrcloud部署模式

  • 相关阅读:
    BZOJ 2190: [SDOI2008]仪仗队
    BZOJ 3195: [Jxoi2012]奇怪的道路
    【BZOJ-1068】压缩 区间DP
    【BZOJ-1103】大都市meg 树状数组 + DFS序
    【BZOJ-4326】运输计划 树链剖分 + 树上差分 + 二分
    【BZOJ-3721】Final Bazarek 贪心
    【BZOJ-4690】Never Wait For Weights 带权并查集
    【BZOJ-2503】相框 并查集 + 分类讨论
    【BZOJ-3653】谈笑风生 DFS序 + 可持久化线段树
    【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心
  • 原文地址:https://www.cnblogs.com/yaokaizhi/p/9698077.html
Copyright © 2020-2023  润新知