zoukankan      html  css  js  c++  java
  • 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部署模式

  • 相关阅读:
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    PTA —— 基础编程题目集 —— 函数题 —— 61 简单输出整数 (10 分)
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    练习2.13 不用库函数,写一个高效计算ln N的C函数
    迷宫问题 POJ 3984
    UVA 820 Internet Bandwidth (因特网带宽)(最大流)
    UVA 1001 Say Cheese(奶酪里的老鼠)(flod)
    UVA 11105 Semiprime Hnumbers(H半素数)
    UVA 557 Burger(汉堡)(dp+概率)
  • 原文地址:https://www.cnblogs.com/yaokaizhi/p/9698077.html
Copyright © 2011-2022 走看看