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种主要特点:
- 以文本为中心的数据
- 读取远多于写入的数据
- 面向文档的数据(扁平化,由值域组成)
- 灵活的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轻松的进行分片操作和复制操作