Solr in Action 第一章翻译(待整理)

Solr in action读书笔记第一篇第一章

 


第1章 Solr简介

本章速览:

·搜索引擎处理的数据特性 
·常见搜索引擎用例 
·Solr核心模块介绍 
·选择Solr的理由 
·功能概述

Solr 定义:

  • 可扩展性:Solr可以把建立索引和查询处理的运算分布到一个集群内的多台服务器上。
  • 快速部署:Solr是开源软件,安装和配置都很方便,可以根据安装包内的Sample配置直接上手。
  • 优化搜索 :Solr搜索够快。对于复杂的搜索查询,Solr可以做到亚秒级的处理,通常几十毫秒就能处理完一次复杂查询
  • 海量文本:Solr是针对百万级以上的海量文本处理而设计的,可以很好地处理海量数据。
  • 以文本为中心的数据 : Solr为搜索包含自然语言的文本内容做了优化,比如电子邮件,网页,简历,PDF文档,或是推特、微博、博客这些社交内容等等,都适合用Solr来处理。
  • 结果是按相关性排序的 : Solr的搜索返回结果是按照结果文档与用户查询之间的相关程度度做排序的,保证最相关的结果会优先返回。

1.1 为什么我需要一个搜索引擎?

1.1.1 管理文本数据集

适合用类似Solr这样的搜索引擎来处理的数据的4种主要特点:

  1. 以文本为中心的数据
  2. 读取远多于写入的数据
  3. 面向文档的数据(扁平化,由值域组成)
  4. 灵活的Schema

第5个特性应该是涉及到大数据的处理,然而我们更注重于分析搜索引擎与其他NoSQL技术的区别,而且Solr对大数据量的支持是毫无疑问的。

这只是一个粗略的准则,并不是一个严格的标准。

以文本为中心的数据

读取远多于写入的数据

面向文档的数据(扁平化,由值域组成)

灵活的Schema

总结一下,Solr这样的搜索引擎是专门优化用于处理以文本为中心的,读取远多于写入的,面向文档的,拥有灵活Schema的数据用的。Solr并不是一种通用数据存储处理技术。

1.1.2 通用搜索引擎使用案例

基本的关键字查询

· 相关结果必须迅速返回,大多数情况下要求一秒钟之内就能够返回 
· 用户的查询字串出现拼写错误时能够自动纠错 
· 用户输入时通过自动补全建议来减少用户的输入负担,这在移动应用中很常见 
· 处理查询字串中的同义词近义词 
· 对包含查询字串的语言变异的文档进行匹配(译者注:语言变异是语义学术语,即用词不完全一样的近似表达) 
· 短语处理,用户是希望匹配短语中所有的单词,还是只要匹配短语中的部分单词就行 
· 对一些通用介词的处理,比如“a,” “an”, “of”, “the”等等 
· 如果最靠前的查询结果用户不满意, 如何给用户返回更多的查询结果

排序的检索结果

对文档的相关度排序十分重要,理由如下:

  • 现代搜索引擎通常都存储了百万甚至上亿的海量数据,查询若不按相关度排序,则用户很可能在返回的结果中迷失。
  • 用户更希望只用很少的关键字就从搜索引擎中查到结果。用户没有耐心,也希望搜索引擎能搜索用户所想而不是用户所说。在移动应用中,这个更为明显,因为移动用户很可能打错字,且输入很少。

除了关键词查询之外

搜索引擎不适合做的事…

1.2 Solr是什么?

本节中从头开始设计一个搜索应用,以此来了解Solr的关键组件,更有助于理解Solr的特性以及他们存在的意义。深入之前,先来了解Solr不是什么。

  • Solr并不是一个像Google或是Bing那样的web搜索引擎
  • Solr和网站优化中经常提到的搜索引擎SEO优化没有任何关系

1.2.1 信息检索引擎

信息检索(IR)是指从海量的数据集合(通常存储在计算机系统中)中,根据某种非结构化的本质属性(通常是文本内容)查找出满足信息需求的材料(通常是文档) 的过程。

图1.2 信息检索的关键数据结构式反向索引 

1.2.2 灵活的概要管理

Solr提供了xml文档来配置索引结构以及字段的解析、呈现方式,即schema.xml。Solr使用schema.xml来给Lucene展示所有可能匹配文档所需要的字段及其数据类型,省时且可读性强。Solr构建的索引与内置的可编程的Lucene索引百分百兼容。

此外Solr在核心的Lucene索引功能之上还添加了其他一些不错的功能。具体来说,Solr提供了Copy Fields和Dynamic Fields两种新的值域类型。Copy Fields提供了一种方法,可以将一个或多个值域中的原始文本内容赋值到另一个新的field值域中。Dynamic Fields则允许你无须在schema.xml里显式的声明,就可以将同一值域类型赋予多个不同的值域。这在为拥有多个值域的文档建立模型时非常有用。

1.2.3 Java Web应用

Solr的设计者们指出Solr非常适合集成到现有的系统中,作为现有系统的一个有力补充。事实上,你很难找出一个Solr无法集成进去的系统。 
Solr提供简单的类REST服务,支持XML,JSON,HTTP等标准。顺便说一句,我们并不使用RESTFul一词来描述Solr基于HTTP的 API,因为它 并不严格遵守所有的REST(Representatonal state transfer)原则。例如,在Solr中会用到HTTP POST来删除文档,而不是用HTTP DELETE。

1.2.4 一个服务中多个索引

Solr支持在单一的Solr 引擎上运行多个Solr 核心。 
每一个核心都有一个独立的索引和配置,在一个Solr实例中可以存在多个Solr 核心。这样你只需要一个Solr服务器就可以管理多个核心, 可以方便的实现服务器资源共享,以及及监控维护服务的共享。Solr有专门的API用于创建和管理多个Core。 
Solr多核心支持功能的一个应用是数据分区,比如用一个core来负责最近更新的文档,而用另外的core来处理之前生成的文档,这个功能被称为按时间顺序分片。

1.2.5 扩展插件... 4

最主要的三个子系统:

  • 文档管理
  • 查询处理
  • 文本分析。

每个子系统由模块化的“管道”来组成,也方便用户加入新功能。就是说为加新功能,你不需要重写Solr的整个查询-处理流程,只需要在已经存在的管道上插入新的搜索组件即可。Solr易扩展也更方便适配你自己的应用需求。

1.2.6 可扩展性... 4

Solr实现可伸缩性的第一张牌是灵活的cache管理功能。该功能可以避免服务器重复进行耗费资源的操作。具体来说就是Solr预先设置了一些cache来节省开销很大的重复计算,比如Solr会缓存查询过滤器的计算结果。

缓存的作用是有限的,为了处理更多的文档和获得更高的查询吞吐能力,你需要能够通过扩展服务器来横向扩展系统的性能。现在我们来研究一下Solr扩展时最常见的两个方面。第一个是查询的吞吐能力扩展,也就是你的引擎每秒钟可以处理的最大查询数是多少。 另一个扩展维度是被索引的文档数。

1.2.7 容错性... 4

我们假定你的系统中一共有4个分片的情况。如果2号分片所在的服务器断电了,那么此时Solr就不能继续正常的建立文档索引了,也不能响应查询服务了。所以这个时候可以说,你的搜索引擎就算“挂掉了”。要避免这种情况,你可以给每一个分片做备份。回到我们的这个例子中,当2号分片挂掉时,Solr会把所有指向2号分片的索引建立请求和查询请求重定向到它的备份哪儿,备份这个时候并没有挂掉,还能正常工作, 所以整个搜索服务还在。出错所产生后索引服务和查询服务仍然可以工作,不过可能不会像之前那么快了,因为少了一台服务器来处理请求。

1.3 为什么选择Solr?... 4

1.3.1 软件架构师选择Solr. 4

Solr全新的SolrCloud功能的亮点:

  • 中心化的配置
  • 分布式的索引,避免单点失败(SPoF)
  • 自动容错,自动产生新的主分片
  • 任意节点均可触发覆盖整个集群所有分片的分布式全查询,且已经集成了自动容错和负载均衡

SolrCloud still requires manual interaction(手动交互) when modifying the size of your search indexes (merging or splitting indexes), and not all Solr features work in a distributed mode. 
SolrCloud在两方面还有待提高。首先,不是所有功能都能工作在分布式模式下。比如 joins连接功能。其次,一旦索引建立,索引的分片数目就不能再动态调整,要想改变分片数的话只能重新对所有文档建立索引。

1.3.2 系统管理员选择Solr.

1.3.3 首席执行官选择Solr.

1.4 优势综述...

Solr的主要功能:

  • 用户体验
  • 数据建模
  • Solr 4的新功能

1.4.1 用户体验类功能...

用户体验类功能:

  • 1、分页和排序功能: 
    分页功能对于两类关键的输出有帮助: 
    1)结果返回的更快了,因为每次查询都只需要返回整个搜索结果中的一个很小的集合; 
    2)可以帮助你追踪到底有多少请求是针对更多页码内容的。
  • 2、分类检索功能: 
    分类检索功能将搜索结果按照特性分类放到一个个小组中,这就为为用户提供了一个不断优化搜索关键字和浏览搜索结果的工具。
  • 3、自动补全功能
  • 4、拼写检查功能: 
    Solr的拼写检查支持两种基本的模式: 
    1 )自动纠错模式:Solr可以在用户出现拼写错误的时候自动根据 该词语在索引中是否存在而做出相应的纠错处理 
    2 )“您要找的是不是…功能“: Solr也可以根据用户的输入,为用户建议一个更佳的输入方案,比如当用户输入”hilands“时,solr会建议用户”您要找的是不是 highlands?“
  • 5、高亮命中结果功能
  • 6、地理位置查询功能

1.4.2 数据模型优势... 5

为搜索建立数据模型时可能会用到的一系列关键功能,包括:

值域的合并和分组功能 
灵活的查询支持功能 
连接功能 
归集功能 
从PDF和word等格式的文档中导入富媒体数据的功能 
从关系型数据库中导入数据的功能 
多种语言的支持

1.4.3 Solr4的新特性... 5

几乎实时的搜索查询 
支持乐观并发机制的原子更新 
实时获取功能 
事务日志的持久层写入 
使用Zookeeper轻松的进行分片操作和复制操作

1.5 本章小结... 5

时间: 2024-08-06 09:14:07

Solr in Action 第一章翻译(待整理)的相关文章

Objective-C高级编程:iOS多线程及内存管理(第一章翻译)

写在翻译之前:当初看到这本书的时候,感觉深入浅出讲得比较到位,但是在市面上看到的翻译版本翻译的却没有原著的精髓和味道.所以产生了自己将其翻译一下给初学者一些便利的想法.所以才有了这个系列的第一章的翻译.目前剩余的部分依然在翻译过程中,估计不久之后就可以陆续地发出了. 因为本人的水平或者用词问题,本翻译难免有不周详或不正确之处.如果有人看到还望指出,我一定会尽力地修改那些不正确的部分,让更多的人可以看到更优质的资料. Chapter 1 Life before Automatic Referenc

ASM学习笔记--ASM 4 user guide 第一章翻译

第一章 介绍 1.1动机 程序分析.生成和转换是非常有用的技术,它具有以下的应用场景: l  程序分析(包括从简单的综合性分析到一个全面的语义分析)可以被用来寻找潜在的bug,发现未使用的代码,进行工程代码的逆向. l  程序生成被用在编译器当中.这包括传统的编译器,也包括为分布式编程使用的stub或skeleton 编译器,即时编译器等 l  程序转换可以被用来优化或者混淆程序,为程序插入debugging或者性能检测代码,方便面向对象编程等. 所有这些技术可以被用到任意的编程语言,但是难易程

iText学习之路(二)iText in Action 第一章 随便画画带你入门

1.1你可以对PDF做什么 Pdf的六个事实(不列举了). PDF相关的技术的概观,画标记的都是iText能够实现的功能,小的标记说明iText只能实现部分功能. iText适用的情况,四点: 1.     内容无法提前知道,必须通过输入或者数据库导入.(就是那些工卡啊,表格啊之类的) 2.     数据量巨大,无法人工生成每个pdf. 3.     批处理程序产生PDF,无人实时监控PDF的产生. 4.     内容自定义或者具有个人风格,例如,文档需要在每页打上水印. 通常Web程序需要动态

Lucene in action 第一章 初识Lucene

1.3 搜索程序组件 Lucene提供搜索程序的最核心模块:索引模块和搜索模块的类库. Solr基于Lucene,提供更丰富的UI和API可以直接部署和使用 下图为搜索程序的基本框架.中间黑体部分为Lucene完成的功能,也是搜索引擎的最核心部分. 搜索引擎评价: 满足基本功能:搜索结果正确显示 搜索回复时间 扩展功能:语法纠错,关键词高亮等 1.3.1索引组件 搜索引擎原理: 朴素思想:顺序搜索 问题:速度太慢 解决:对文本内容建立索引,通过索引返回结果 1.获取内容: 网页内容:爬虫工具 文

spring in action第一章小结1

1 spring基本理念是简化java开发. 使用以下4个策略简化java开发 1) 基于POJO的轻量级和最小侵入性编程 2)通过使用DI和AOP实现松耦合 3)基于切面和惯例进行声明式编程 4)通过切面和模板减少样板式代码 2 依赖注入:对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定.对象无需自行创建或管理他们的依赖关系---依赖关系将会被自动注入到需要他们的对象中. 3 装配:创建应用组件之间协作的行为称为装配. 4 面向切面编程被定义为促使应用程序分离关注点的一项技

【tapestry3笔记】--tapestry 初探,《 tapestry in action 》第一章学习笔记

由于要维护一个项目,要用到tapestry3这个老框架,虽然这个框架很老,但是在我看来ta的思想还是很先进的---面向组件编程. 由于网上资料少的可怜,辛苦找了很久终于找到一本名为<tapestry in action>的工具书,以下学习笔记均以此书为参考. 正文---tapestry初探 tapestry in action 第一章学习笔记 tapestry是一款以组件为核心的开发框架,组件就向一个黑盒子,我们无需关系组件是如何实现的,只需合理使用即可.这有点像jquery的插件,我们无需关

Solr In Action 中文版 第一章 (二)

Solr到底是什么? 在本节中,我们通过从头设计一个搜索应用来介绍Solr的关键组件.这个过程将有助于你理解Solr的功能,以及设计这些功能的初衷.不过在我们开始介绍Solr的功能特性之前,还是要先澄清一下Solr并不具有的一些性质: 1)  Solr并不是一个像Google或是Bing那样的web搜索引擎 2)  Solr和网站优化中经常提到的搜索引擎SEO优化没有任何关系 好了,现在假设我们准备为潜在的购房客户设计一个不动产搜索的网络应用.该应用的核心用例场景是通过网页浏览器来搜索全美国范围

Solr In Action 中文版 第一章(一)

1.1我到底需要一个搜索引擎吗? 第一章           Solr 简介 本章速览: ·搜索引擎处理的数据特性 ·常见搜索引擎用例 ·Solr核心模块介绍 ·选择Solr的理由 ·功能概述 伴随着社交媒体.云计算.移动互联网和大数据等技术的高速发展,我们正迎来一个令人激动的计算时代.软件架构师们开始面对的主要挑战之一,便是如何处理全球巨大的用户基数所产生及使用的海量数据.此外,用户们开始期待在线软件应用永远都是稳定可用的,并且能够一直保持响应,这对应用就提出了更高的可扩展性和稳定性需求.为了

Solr In Action 中文版 第一章(三)

3.1              为什么选用Solr? 在本节中,我们希望可以提供一些关键信息来帮助于你判断Solr是否是贵公司技术方案的正确选择.我们先从Solr吸引软件架构师的方面说起. 3.1              软件架构师眼中的Solr 在评估一项新技术时,软件架构师必须要考虑一系列的因素,其中就包括系统的稳定性,可伸缩性,还有容错性.Solr在这三方面的得分都很不错. 说到稳定性,Solr是一个由活跃的开源社区和经验丰富的代码提交者共同维护的一项成熟技术.Solr和Lucene的