如何在PDF中显示word文档结构图不显示?比如第一章...

当前位置: >>
solr in action第一章
第一章 Solr 简介本章内容:数据由搜索引擎处理的特点 通用搜索引擎的用例 Solr 的关键组件 选择 Solr 的理由 功能概述与快速增长的技术,如社交媒体、云计算、移动应用程序和大数据,在性能上的挑战,这些都是激动人 心的,。软件架构师所面临的主要挑战之一是在全球用户基础上处理海量巨大的消费和产生的数据,。 此外,在线用户期望应用程序总是可用和即使响应的。解决可伸缩性和可用性需求的现代 web 应用程 序中,我们看到越来越多的兴趣专业、非关系数据存储和处理技术,统称为 NoSQL。这些系统有一个共 同的设计模式匹配特定类型的数据存储和处理引擎而不是强迫所有数据使用 once-standard 关系模型。 换句话说,NoSQL 技术优化解决一个特定类的问题为特定类型的数据。规模导致的需要混合架构组成 的各种 NoSQL 和关系数据库,一去不复返了的日子放之四海而皆准的数据处理的解决方案。这本书是关于 Apache Solr,特定的 NoSQL 技术。 Solr,正如它非关系弟兄,是为一个独特的优化类问题。 具体来说,Solr 是一个可伸缩的、便于部署的企业搜索引擎优化的搜索卷 text-centric 数据并返回结果 按相关性排序。下面***他的基本组成部分。 Scalable------ Solr 尺度分配工作(索引和查询处理)多个服务器集群。 Ready to deploy ----Solr 是开源的,很容易***和配置,提供了一个预配置的例子来帮助你开始。 优化搜索- Solr 是快速和可以执行复杂的查询次秒级的速度,通常只有几十毫秒。 大量的文件- Solr 旨在处理索引包含数以百万计的文件。 Text-centric - Solr 是优化搜索自然语言文本,如电子邮件、网页、简历、PDF 文档和微博或博 客等社会信息。 结果按相关度排序- Solr 返回文档为基础的排名顺序每个文档是多么重要用户的查询。在这本书中,您将了解如何使用 Solr 来设计和实现可伸缩的搜索解决方案。你将会学习和用例 Solr 支 持的类型的数据。这将帮助您了解 Solr 融入现代应用程序的大局架构,Solr 旨在解决这问题。 1.1。我为什么需要一个搜索引擎?因为你看这本书,我们怀疑你已经知道为什么了你需要一个搜索引擎。而不是猜测你为什么考虑 Solr, 我们会使用合适的方式来回答你这个困难的问题,为了决定一个搜索引擎是否适合你。最后,它归结 为了解您的数据和用户,选择一种有效的技术。让我们首先看的属性数据,搜索引擎优化处理。1.1.1。管理 text-centric 数据现代应用程序架构的一个特征匹配存储和处理引擎数据。如果你是一个程序员,你知道选择最好的数 据结构基于你如何使用一个算法中的数据;也就是说,您不要使用链表你需要快速随机查找。同样的原 则适用于搜索引擎。搜索像 Solr 的引擎优化处理数据表现出四个主要特点: 1。Text-centric 2。Read-dominant 3。面向文档的 4。灵活的模式 可能第五个特点是有大量的数据处理,即“大数据,“但我们的重点是让搜索引擎特别 NoSQL 技术。 不用 说,Solr 可以处理大量数据。尽管这些数据的四个主要特点,搜索引擎喜欢 Solr 处理有效,你应该认为它们是粗略的指导方针,而不 是严格的规则。让我们挖每看到为什么他们重要的搜索。现在,我们将专注于高层概念,我们将进入“如 何”在以后的章节。Text-centric毫无疑问你会遇到这个词非结构化用于描述数据的类型这是由一个搜索引擎。 我们认为非结构化有点 模糊,因为任何文本文档基于人类语言具有隐式结构。你能想到的非结构化从计算机的角度,认为文本 流字符。字符流必须使用特定于语言的解析规则提取的结构和搜索,这正是搜索引擎。我们认为 text-centric 更适合描述 Solr 处理的数据类型,因为搜索引擎是专门设计用于提取文本的隐含 的结构到它的索引来提高搜索。Text-centric 意味着文档的文本数据包含用户感兴趣的信息。当然,一 个搜索引擎支持非文本数据,例如日期和数字,但它的主要力量是处理基于自然语言的文本数据。中心部分章节是很重要的,因为如果用户不感兴趣的信息文本,搜索引擎可能不是最好的解决你的问题。 考虑一个应用程序的员工创建旅行费用报告。每个报告都包含一个数量的结构化的数据字段,如日期、 费用类型、货币和金额。在另外,每个费用可能包括一个 notes 字段,员工可以提供一个简短的费用的 描述。 这将是一个例子的数据包含文本,但不是 text-centric,它不太可能,会计部门需要搜索笔记当生成 月度费用报告。仅仅因为数据包含文本字段并不意味着数据是一个适合一个搜索引擎。 考虑您的数据是否是 text-centric。是否考虑的主要问题中的文本字段数据包含用户想要查询的信息。 如果是的,那么一个搜索引擎可能是一个不错的选择。您将看到如何解锁的文本结构使用 Solr 的文本 分析能力在 5 和 6 章。Read-dominant另一个关键方面的数据,搜索引擎有效地处理数据 read-dominant,因此为了有效地访问,而不 是更新频繁。我们要清楚,Solr 并允许您更新现有文档索引。认为 read-dominant 意味着文档 阅读往往远远超过他们创建或更新。 但这并不意味着你不能写大量的数据或你经常限制您可 以编写新的数据。事实上,的一个关键接近实时的特性在 Solr 4(NRT)搜索,你可以成千上万的 索引文档每秒钟,让他们立即搜索” 。 read-dominant 数据背后的关键是,当你写数据到 Solr,它的为了阅读和重读无数倍。认为一个 搜索引擎被优化的执行查询(一个读操作),,而不是存储数据(一个写操作)。 还有,如果你必须在 一个搜索引擎更新现有数据通常,这可能表明一个搜索引擎可能不是你需求最好的解决方案。 另一种 NoSQL 技术,如 Cassandra,可能是一个更好的选择 你需要快速随机写入现有数据。面向文档的直到现在,我们已经谈到了数据,但是在现实中,搜索引擎使用的文档。 在一个搜索引擎,一个文档是一个 自包含的字段的集合,每个字段只有拥有数据和不包含嵌套的字段。换句话说,文档在搜索引擎像 Solr 平面结构和不依赖于其他文档。平坦的概念在 Solr 略有放松,在一个领域可以有多个值,不但是字段包 含分支学科。你可以存储多个值在一个领域,但你不能窝字段 在其他领域。,面向文档的方法在 Solr 的数据处理文档格式,如网页,博客,或 PDF 文档,但是建模归一化数据存储在关 系数据库中?在这种情况下,您应该需要正规化数据分布在多个表成一个平面,独立的文档结构。 我们将 学习如何处理这样的问题在第三章。 你也要考虑哪些字段必须存储在 Solr 和在你的文档应存储在另一个系统,如数据库。一个搜索引擎并 不是存储数据的地方,除非是有用的搜索和显示结果;例如,如果您有一个在线视频的搜索索引,你不想 在 Solr 中存储二进制视频文件。 相反,大型二进制字段应该存储在另一个系统,如内容分布网络(CDN)。 一般来说,你应该存储的最小集合为每个文档信息需要满足搜索需求。这是一个明确的的例子,不是治 疗 Solr 一般数据存储技术;Solr 的工作是发现感兴趣的视频,而不是管理大型二进制文件。Flexible schema搜索引擎数据最后的主要特征是,它有一个灵活的模式。这意味着在搜索索引文件不需要有一个统一 的结构。在一个关系数据库中,表中的每一行都有相同的结构。Solr 文档可以有不同的字段。当然,应 该有一些字段之间的重叠在相同的索引文件,但它们不必是相同的。 想象一个搜索应用程序寻找房屋出租或出售。上市显然会分享等位置、数量的卧室和浴室的数量,但 他们也会根据清单类型有不同的字段。房屋出售字段清单价格和年度房产税,而房子租金每月会有一 个字段租金和宠物政策。总之,搜索引擎一般和 Solr 特别是进行了优化处理数据有四个具体特点:text-centric read-dominant,面 向文档的,和灵活的模式。总的来说,这意味着 Solr 不是一个通用的数据存储和处理技术。拥有这样一个各种选择的要点是,存储和处理数据你没有找到一个放之四海而皆准的技术。搜索引擎 擅长某些别人的东西,很可怕的。这意味着,在大多数情况下,你会发现这一点 Solr 互补关系和 NoSQL 数据库超过它取代他们。既然我们已经讨论了 Solr 优化处理的数据的类型,让我们思考主要用例像 Solr 是专为搜索引擎。这些 用例旨在帮助您了解如何不同于其他搜索引擎数据处理技术。1.1.2。通用搜索引擎的用例在本节中,我们看的事你可以去做一个搜索引擎。与我们的 1.1.1 节中讨论的类型的数据,使用这些指 导方针,没有严格的规定。在我们进入细节之前,我们应该提醒你记住,好的卓越在搜索很高。现代用户 习惯于等网络搜索引擎谷歌和必应被现代 web-information 需要快速和有效的服务。此外,最受欢迎的 网站有帮助人们找到强大的搜索解决方案快速的信息。当你评估一个搜索引擎喜欢 Solr 和设计搜索 解决方案,确保你把用户体验作为一个高优先级。基本的关键字搜索这一点显而易见指出,搜索引擎支持关键词搜索,这是它的主要目的,但值得一提的是,因为关键词搜索 是最典型的用户将开始处理您的搜索方式的解决方案。 这将是罕见的一个用户要填写一个复杂的搜索 表单。考虑到基本的关键字搜索最常见的用户将与你的搜索引擎,它的原因此功能必须提供一个良好 的用户体验。一般来说,用户需要输入一些简单的关键字然后返回结果。这可能听起来像一个简单的任务匹配查询 条件的文件,但考虑的几个必须解决的问题提供一个良好的用户体验: ?必须迅速返回相关的结果,在大多数情况下在 2 秒或者更少的时间返回。 ?拼写校正是必要的,以防用户写错的一些查询条件。 ?Autosuggestions 保存按键,特别是对于移动应用程序。 ?同义词的查询条件必须认可。 ?包含查询术语的语言变体的文档必须匹配。 ?词处理是必要的,也就是说,用户想要匹配所有文件单词或任何的单词短语。 ?查询常用单词像“一”,“一个”,“的”和“必须处理正常。 ?,如果结果不令人满意,应该返回 top10 结果或者更多的结果供用户选择。正如您可以看到的,存在许多问题,使一个看似基本特征很难没有专门的方法实现。但与 Solr 等搜索引 擎相比,这些功能,很容易实现。一旦你给用户一个强大工具来执行关键字搜索,您需要考虑如何显示结 果。这给我们带来了我们的下一个用例:排名根据他们的相关用户的结果查询。检索排序搜索引擎是独立作为一种为一个查询返回“顶级”文档。在 SQL 查询到一个关系数据库中,一行匹配查 询或者不,和结果基于一个或多个列进行排序。搜索引擎返回的文档进行排序降序排列的分数表示的 强度匹配的文档查询。如何匹配计算的强度取决于许多因素,但总的来说更高的分数意味着文档更多 相关查询。排名文档的相关性是很重要的几个原因: ?现代搜索引擎通常存储大量的文档,经常数百万或数十亿的文档。没有排名文档与查询的相关性,用户 可以成为超载的结果没有明确的导航方式。 ?用户更熟悉和习惯的结果搜索引擎只使用一些关键字。 用户是不耐烦和期望搜索引擎“做我的意思是, 不是我说什么。“这是真正的搜索解决方案支持的移动应用程序,用户将进入短查询潜在的拼写错误和 期望它简单的工作。影响排名,您可以分配更多的重量,或提高,某些文件,字段,或特定条款。你可以提高结果的年龄对推动 新文档搜索结果的顶部。您将了解排名在第三章的文件。除了关键字搜索与 Solr 等搜索引擎,用户可以输入几个关键字,为许多用户返回结果。,这仅仅是第一步的交互式会话 搜索结果给他们继续探索的能力。的主要用例之一搜索引擎来驱动一个 information-discovery 会话。 频繁,用户不会确切地知道他们正在寻找什么,通常不知道什么信息包含在您的系统。一个好的搜索引 擎可以帮助用户在他们狭窄信息需求这里的中心思想是要从最初的查询,返回文档以及工具来帮助用户改进自己的搜索。换句话说,除了返 回匹配的文档,你还返回工具,让用户了解下一步该做什么。例如,您可以分类搜索结果使用文档允许用 户缩小他们的特性结果。这就是所谓的面向方面的搜索,Solr 的主要优势之一。你会看到的一个例子 在上雕琢平面的搜索房地产在 1.2 节。这方面都包含在在第 8 章。不要使用一个搜索引擎……让我们考虑一些用例中,搜索引擎也不会有用。 首先,搜索发动机被设计成每查询返回一组文件,通常 10 - 100。更多的文件相同的查询可以使用 Solr 的内置分页检索的支持。考虑一个查询相匹配的一百万 个文档;如果你要求所有的文件回来一次,你应该准备好等待很长一段时间。查询本身可能会快速执行, 但从基础索引重建一百万个文档结构将是极其缓慢的,就像引擎 Solr 字段存储在磁盘的格式它很容易 创建一些文档,但它需要很长时间吗重建许多文档时产生的结果。另一个用例中,您不应该使用一个搜索引擎是深度分析的任务需要访问大量的子集索引(除非你有很多 的内存)。即使你避免之前的问题通过分页的结果,底层的数据结构搜索索引不是用于检索索引的很大 一部分。我们已经接触了这之前,但我们会重申,搜索引擎不是替换查询在文档之间的关系。Solr 支持查询使用 27 日亲子关系,但不支持导航复杂的关系结构与 SQL 是可能的。在第三章中,您将学习技术来适应关 系数据使用 Solr 的平坦的文档结构。同样, 至少 Solr 没有直接支持大多数搜索引擎文档级安全,。如果你需要细粒度权限文件,然后你必须 处理外部的搜索引擎。现在,我们看到的数据类型和用例的搜索引擎是正确的(或错误)的解决方案,这是时间去探究什么 Solr 以及它如何在高水平。在下一节中,您将了解什么功能 Solr 提供以及它的方法等重要 software-design 原则与外部系统的集成,可伸缩性和高可用性。1.2。Solr 是什么?在本节中,我们介绍了 Solr 搜索应用程序设计的关键组件从地上起来。这将帮助您了解 Solr 提供特定 的功能和他们的动机存在。但是在进入之前的细节 Solr 是什么,让我们确保你知道 Solr 不是。 ?Solr 不是一个网络搜索引擎像谷歌或必应。 ?Solr 无关与搜索引擎优化(SEO)的网站。现在想象一下,我们需要设计一个房地产搜索 web 应用的潜力购房者。这个应用程序的核心用例将寻 找待售房屋使用一个 web 浏览器。图 1.1 描述了这个虚构的 web 应用程序的屏幕截图。不要过于关 注 UI 的布局和设计,这只是一个模型给视觉上下文。最重要的是体验,Solr 可以支持的类型。图 1.1。一个虚构的搜索应用程序描述的模型截图 Solr 功能 让我们参观图 1.1 中的截图说明 Solr 的一些关键特性。从左上角,工作顺时针,Solr 提供了强大的功能 支持关键字搜索框。1.1.2 节中我们讨论了,提供一个良好的用户体验基本的关键字搜索需要复杂的基 础设施,Solr 提供的盒子。具体来说,Solr 提供拼写检查(建议用户类型)、同义词处理、查询词和文本 分析工具来处理查询语言的变化条款,比如买房子或购买一个家。Solr 还提供了一个强大的解决方案,实现地理空间查询。在图 1.1 中,匹配家庭列表显示在地图上根据 他们的距离中心的纬度/经度的虚拟社区。Solr 的地理空间支持,您可以通过地理距离排序文件,限制在 一个文档特定的地理距离,甚至从任何位置返回每个文档的地理距离。也很重要,地理空间搜索快速和 高效的,支持的 UI 允许用户在地图上放大或缩小和移动。一旦用户执行一个查询,可以进一步使用 Solr 的分类结果分类显示特性的支持文档的结果集。方面的 一种方式分类的文件在一个结果集,以发现和查询优化。 在图 1.1 中,搜索结果分为特性方面,家庭风格, 和清单类型。现在,我们有一个基本的功能类型的想法我们需要支持我们的真实房地产搜索应用程序,让我们看看我 们如何实现这些特性与 Solr。来开始,我们需要知道 Solr 如何匹配清单在索引查询输入的用户,因为这 是所有搜索应用程序的基础。 1.2.1。信息检索引擎Solr 是建立在 Apache Lucene,一个流行的、基于 java 的开放源码的信息检索 lib。我们可以节省的详 细讨论信息检索是第三章。为现在,我们将涉及的关键概念信息检索,从正式定义从一个著名的学术文 本在现代搜索概念:信息检索(IR)发现非结构化的材料(通常是文件), 满足一个信息需要从内部大集合(通常存储在电脑上)。房地产在我们的示例应用程序中,用户的主要需要的是找到一个家购买基于位置,风格,功能,和价格。 我 们的搜索索引将包含家在美国上市,绝对有资格作为一个“大收集。 “简而言之,Solr 使用 Lucene 索引提 供核心数据结构文档和执行搜索找到文档。Lucene 是一个基于 java 库的建立和管理一个反向索引,一个专业数据结构进行匹配查询条件文本文 档。图 1.2 提供了一个 Lucene 的简化描述反向索引对于我们的示例房地产搜索应用程序。图 1.2。支持信息检索是关键数据结构反向索引。 您将在第 3 章学习如何一个反向索引。现在,是足够的回顾图 1.2 了解当一个新文档(#图 44)添加到索 引和文档是如何使用反向匹配查询方式索引。你可能会认为一个关系数据库可能返回相同的结果使用一个 SQL 查询,这是真正的对这个简单的例子。 但是一个关键的区别 Lucene 查询和数据库查询是在 Lucene 结果排名的关联查询和数据库结果只能 按一个或多个表的排序列。换句话说,排名文档的相关性是信息的一个关键方面检索并帮助区分从其 他类型的查询。你也许会感到惊奇,还像谷歌这样的搜索引擎使用一个反向索引搜索网络。事实上,需要建立一个网络 级反向索引了 MapReduce 的发明。 MapReduce 编程模型,将大规模的数据处理操作在一个商品服务器集群通过制定算法分成两个阶 段:map 和 reduce。 在函数式编程,MapReduce 通过谷歌来构建其巨大的反向索引适应电力网络搜索。 使用 MapReduce,地图阶段产生一个独特的术语和术语文档 ID 发生。 在降低阶段,术语是排序,这样所 有术语/ docID 对发送到为每一个独特的词相同的减速过程。减速器总结所有词的频率每学期生成反 向索引。Apache Hadoop MapReduce 的提供了一个开源实现,而且它的使用 Apache Nutch 开源项目来构建一 个 Lucene 为网络级反向索引使用 Solr 搜索。一次彻底的讨论 Hadoop 和 Nutch 超出了这个范围 书,但我们鼓励你去调查这些项目如果您需要构建一个网络级搜索索引。现在,我们知道,Lucene 提供了核心基础设施来支持搜索,让我们看看值 Solr 的 Lucene 补充道,从你如 何定义你的索引使用 Solr 的灵活模式结构。xml 配置文件。1.2.2。灵活的模式管理虽然 Lucene 索引文件和执行查询,提供图书馆缺少的是一种简单的方法来配置你想让你的索引结构。 使用 Lucene,您需要编写 Java 代码来定义字段和如何分析这些字段。Solr 添加一个简单的声明方式 定义索引的结构以及如何想要的字段代表和分析:一个 XML-configuration 文档命名 schema.xml。在 后台,Solr 模式使用。xml 表示所有可能的领域和必要的数据类型映射到 Lucene 索引文件。这节省了 编程时间,让你的索引结构更容易理解和交流。一个 Solr-built 指数是 100%兼容 Lucene 索引构建的 编程方式。Solr 还增加了不错的构造上的核心 Lucene 索引功能。 具体来说,Solr 提供复制和动态字段。 复制字段 提供一种方法来把生一个或多个字段的文本内容和应用于不同的领域。 动态字段允许您相同的字段类 型适用于许多不同的领域在 schema.xml 显式地声明它们。这是用于建模的文档许多领域。我们覆盖 模式。xml 在章节 5 和 6 讲解。房地产而言,我们的示例应用程序中,你也许会感到惊奇,我们可以使用 Solr 服务器的例子 schema.xml 没有做任何修改。 这显示了如何灵活 Solr 模式支持;示例 Solr 服务器设计支持产品搜索,但是它对我们 的房地产搜索很不错的例子。在这一点上,我们知道,Lucene 索引文档提供了一个强大的图书馆,执行查询,和排名结果。 Schema.xml, 你有一个灵活的方式定义索引结构而不必使用 XML-configuration 文档程序 Lucene API。现在,您需 要一种方法来从 web 访问这些服务。在在下一节中,我们学习如何 Solr 作为 Java web 应用程序集成 和运行其他技术使用证明标准,如 XML、JSON 和 HTTP。1.2.3。Java web 应用程序Solr 是一个 Java web 应用程序,运行在任何现代 Java Servlet 引擎,比如 Tomcat 或一个完整的 J2EE 应用程序服务器如 JBoss 或 Oracle。图 1.3 描述了 Solr 服务器的主要软件组件。 图 1.3。Solr4 的主要组件诚然,图 1.3 有点压倒性的乍一看。花一些时间来扫描图和了解的术语;不要担心如果你不熟悉的所代 表的术语和概念。读完这本书,你应该有一个强大的理解所有的概念提出了如图 1.3 所示。我们介绍这一章中提到,Solr 设计师认识到 Solr 是最好的补充技术,在现有架构工作。 在事实上,你会很 难找到一个环境 Solr 并不在下降。作为你会看到在第二章,您可以启动示例 Solr 服务器在几分钟后 你完成下载。为了实现轻松集成的目标,需要可以从 Solr 的核心服务许多不同的应用程序和语言。Solr 提供了简单 的 REST-like 服务的基础证明标准的 XML、 JSON 和 HTTP。 作为一个短暂的一边,我们避免了 ESTful 标签 Solr 的基于 http 的 API,因为它并不严格遵守所有的休息(Representational State Transfer)原则。 例如,在 Solr 中,您使用 HTTP POST 删除文档,而不是 HTTP deleteREST-like 接口是很好的基础,但是通常开发人员喜欢访问客户端库的语言选择抽象一些样板机械的 调用 web 服务并处理响应。这里有好消息最流行的语言,包括 PHP、Java、Python。净,Ruby 有一个 Solr 客户机库。1.2.4。在一个服务器的多个索引现代应用程序体系结构的一个特点是在面对需要灵活性快速变化的需求。的方法之一 Solr 帮助在这 种情况下是你不需要做所有的事情在 Solr 索引,因为 Solr 支持运行多个核心在一个引擎。 在图 1.3 中, 我们已经描述了多个核心作为单独的层在相同的 Java web 应用程序环境中运行。认为每个核心作为一个单独的指数和配置,可以有许多核心一个 Solr 实例。这允许您管理多个核,以便 从一个服务器你可以共享服务器资源,监控等管理任务维护。Solr 提供了一个 API 来创建和管理多个 核心,将在第 12 章覆盖。一个使用 Solr 的多核支持数据分区,如要为最近的一个核心文档和年长的另一个核心文件,称为时间分 片。另一个使用 Solr 的多核支持是支持多租户应用程序。在我们的房地产应用程序中,我们可能会使用多个核心管理不同类型的上市足以证明不同有不同的索 引。考虑实际房地产上市公司的农村土地,而不是家庭。购买农村土地是一个不同的过程比在城市买 房子,所以,有理由,我们可能想要管理我们土地上市在一个单独的核心。1.2.5。可扩展(插件)图 1.3 描述了 Solr 的三个主要的子系统:文档管理、查询处理和文本分析。当然,这些是复杂的高级抽 象,在 Solr 子系统;我们在后来书中将了解每一个。 每个系统是由模块化的“管道”,允许您插入新的功能。 这意味着而不是在 Solr 方法将覆盖整个引擎,你插入一个新搜索组件到现有的管道。这使得核心 Solr 功能易于扩展和定制,以满足您的特定应用程序的需求。1.2.6 可伸缩的Lucene 是一个极其快速搜索库,Lucene 和 Solr 充分利用的速度。但无论 Lucene 是多快,单个服务器 如何将达到极限它可以处理许多并发查询从不同用户由于 CPU 和 I / O 约束。作为第一步实现可伸缩性,Solr 提供灵活的 cache-management 特性帮助你的服务器重用计算昂贵的 数据结构。具体来说,Solr 是预先配置的缓存节省昂贵的 recomputations,等缓存查询筛选的结果。我 们将在第四章了解 Solr 的 cache-management 特性。 只缓存让你到目前为止,在某些时候你需要向外扩展查询处理更多的文件和更高的吞吐量能力通过添 加更多的服务器。现在,让我们关注的两种最常见的维度在 Solr-query 可伸缩性吞吐量和文件索引的 数量。查询吞吐量的数量查询你的引擎可以支持每秒。虽然 Lucene 可以执行每个查询很快,有限的并 发请求一个服务器可以处理多少。为更高的查询吞吐量,你添加副本索引,以便更多的服务器处理更多 的请求。这意味着如果你的指数跨三个服务器复制,你可以处理大约三倍的每秒查询,因为每个服务器 处理查询交通的三分之一。在实践中,很少达到完美的线性可伸缩性,所以添加三个服务器可能只允许 您处理两倍半查询一个服务器。可伸缩性的其他维度是索引文件的数量。如果你处理大量,那么你可能会达到一个点你有太多一个实 例文档,查询性能将会受到影响。处理更多的文档,您将索引拆分为多个较小的数据块碎片,然后分发 搜索整个碎片。一个趋势在现代计算是构建软件体系结构可以扩展使用虚拟化的硬件水平。添加更多的服务器 处理更多的流量。使用虚拟化的硬件都加剧了这一趋势云计算提供商如 Amazon EC2。虽然 Solr 将 运行在虚拟化硬件,您应该清楚,搜索是 I / O 和内存密集型。因此,如果搜索性能是您的组织的首要任 务,你应该考虑部署 Solr 在高端硬件高性能磁盘,理想的固态硬盘(ssd)。 硬件考虑部署 Solr 在 12 章进 行了讨论。可伸缩性是很重要的,但是生存能力为现代失败也很重要系统。在下一节中,我们将讨论如何 Solr 处理 软件和硬件故障。1.2.7。容错除了可伸缩性,您需要考虑如果一个或更多的服务器失败,尤其是如果你打算 Solr 部署在虚拟硬件或商 品硬件。底线是你必须计划失败。即使是最好的架构最高端硬件将会经历失败。让我们假设你为指数,有四个碎片和服务器托管 shard2 失去权力。 在这一点上,Solr 不能继续索引文件, 不能服务查询,你的搜索引擎实际上是失望。为了避免这种情况,您可以添加的复制品每一个碎片。在 这种情况下,当 shard2 失败,Solr 引导交通的索引和查询复制品,Solr 集群仍然在线。这个失败的结果 是,索引和查询仍然可以处理,但他们可能没有那么快,因为你有一个更少的服务器来处理请求。我们将 讨论故障转移场景在 12 和 13 章。至此,您已经看到,Solr 一个现代的、精心设计的体系结构具有可扩展性和容错性。虽然这些方面考虑 如果你很重要已经决定使用 Solr,你仍然可能不会相信 Solr 是正确的选择为您的需要。在下一节中, 我们描述的好处 Solr 的角度不同的利益相关者,如软件架构师、系统管理员和 CEO。1.3。Solr 的原因?在本节中,我们提供关键信息,帮助您决定如果 Solr 是正确的技术为您的组织。我们首先解决为什么 Solr 吸引软件架构师。 1.3.1。Solr 软件架构师当评估新技术,软件架构师必须考虑许多因素包括稳定性、可伸缩性和容错。Solr 在三个类别分数都 是高分。在稳定性方面,Solr 是一个充满活力的社区和成熟的技术支持经验丰富的提交者。一件事冲击新用户 Lucene 和 Solr 是它不是闻所未闻的部署从源代码直接从主干,而不是等待进行正式发布。 我们不建议 你无论如何这是可以接受的您的组织。我们只指出这一点,因为它是一个深度和证明广度 Lucene 和 Solr 的自动化测试。如果你有一个每夜构建了树干所有自动化测试通过,那么你可以相当自信的核心 功能是固体。我们已经接触了 Solr 的方法在部分 1.2.6 中可扩展性和容错性 1.2.7。作为架构师,您可能最好奇 Solr 的局限性的可伸缩性和容错方法。 首先,你应该认识到,分片和 Solr 复制特性得到改善在 Solr 4 健壮和 容易管理。扩展的新方法被称为 SolrCloud。在后台,SolrCloud 使用 Apache zookeeper 分配在一个 Solr 服务器集群和配置跟踪集群的状态。这里有突出的新 SolrCloud 特点:?集中配置。 ?分布式索引没有单点故障(SPoF)。 ?自动故障转移到一个新的碎片的领导者。 ?查询可以发送到任何节点在一个集群中触发一个完整的、分布式搜索在所有的碎片,在故障转移和负 载平衡支持下建成的这并不是说,Solr 扩展没有改进的余地。SolrCloud 仍然时需要人工交互修改搜索索引的大小(或合并 分裂 index),并不是所有的 Solr 功能工作在分布式模式。我们将进入所有在第 12 章的细节扩展 Solr, 尤其是 SolrCloud 的新特性在第 13 章,但我们要确保架构师都知道,Solr 扩展已经走了在过去的几年里, 现在没有 SPoF 使强大的扩展。1.3.2。Solr 的系统管理员作为系统管理员,高你的问题对采用新技术像 Solr 是否它适合你现有的基础设施。最简单的***是:是 的。 Solr 是基于 java 的,它运行在任何操作系统平台,J2SE 6. x / 7。 x JVM。 除了盒子,Solr Jetty,Oracle 提供的开源 Java servlet 引擎。 否则,Solr 是一个标准的 Java web 应用程序轻松部署到任何 Java web 应用程序服务器如 JBoss 或 Apache Tomcat。所有访问可以通过 HTTP,Solr 和 Solr 是设计用于处理 HTTP 缓存反向代理像鱿鱼和清漆。Solr 还与 JMX,所以你可以钩你最喜欢的监视应用程序,比如 Nagios另外,Solr 提供了一个不错的管理控制台检查配置设置,查看统计信息,发布测试查询和监控 SolrCloud 的健康。图 1.4 是一个截图的 Solr 4 管理控制台。我们会在第二章了解更多。 图 1.4。Solr 的截图 4 管理控制台,你可以发送测试查询,ping 服务器,查看配置设置,,看到了吗你的碎 片和副本是如何分布在集群。1.3.3。Solr 的首席执行官虽然不太可能,许多首席执行官会读这本书,这里有一些关键的谈话关于 Solr,以防你的 CEO 停止你在 大厅里。 ?高管今天想知道投资技术将还清从长远来看。你可以强调,许多公司仍然运行在 Solr 1.4,在 2009 年被释放,这意味着 Solr 成功的记录和不断改善。 ?ceo 像技术可以预测的。在下一章中你会看到,Solr“工作”,你可以在几分钟内运行起来。 ?Solr 有一个很大的支持社区。会发生什么如果 Solr 的家伙走了门,业务会停止吗?的确,Solr 是复杂的 技术,但是它背后有一个活跃的社区意味着你有帮助当你需要它。您还可以访问源代码,这意味着,如果 东西坏了需要修改,你可以自己做。许多商业服务提供商还帮助你计划、实现和维持你的*** Solr,和 许多的报价 Solr 的培训课程。 ?Solr 开始不需要太多的初始投资。(这可能是一个更感兴趣的参数,首席财务官)。不知道你的大小和 规模环境中,我们有信心说,您可以启动 Solr 服务器几分钟,快速索引文件。 服务器在云中运行可以处理 数以百万计的文档和查询以亚秒级响应时报》表示。1.4。功能概述最后,让我们做一个快速的 Solr 的主要特性,围绕以下类别: ?用户体验 ?数据建模 ?Solr 4 新特性 提供一个良好的用户体验与搜索解决方案将是一个共同的主题在本书中,所以让我们先看到 Solr 如何 帮助让你的用户高兴。1.4.1。用户体验功能Solr 提供了许多重要的功能,帮助您交付的搜索解决方案易用、 直观的和强大的。 然而,你应该注意,Solr 只公开了一个 REST-like HTTP API 和没有提供搜索相关 UI 组件在任何语言或框架。你要卷起袖子 和开发自己的搜索 UI 组件,利用下面的用户体验的一些特点:?分页和排序 ?层面搜索 ?自动建议 ?拼写检查 ?高亮 ?地理空间搜索分页和排序而不是返回所有匹配的文档,Solr 是优化翻页请求,只返回前 N 文档第一页。如果用户不找到他们正在 寻找在第一个页面中,您可以请求使用后续页面简单的 API 请求参数。分页有助于两个主要成果:(1) 的结果更迅速地返回,因为每个请求只返回的一个小子集搜索结果;(2)它可以帮助您跟踪多少查询导 致要求更多页面,这可能是一个迹象表明 relevance-scoring 问题。您将了解在第 7 章的分页和排序。层面搜索分类为用户提供工具来优化他们的搜索条件,发现更多通过搜索结果分类到子组使用方面的信息。在 我们的房地产示例(图 1.1),我们看到搜索结果从一个基本的关键字搜索组织成三个方面:功能,风格,和 清单类型。分类是其中一个更受欢迎的和强大的功能在 S我们在第八章深入讨论它。自动建议大多数用户会期待你的搜索应用程序“做正确的事,”即使他们提供不完整的信息。 自动建议允许用户看 到建议的条款和列表基于文档索引的短语。 Solr 的自动建议功能允许用户开始输入几个字符和获得建 议的列表查询每个按键。这减少了许多不正确的查询,特别是因为很多用户从一个移动设备用小键盘 搜索。自动建议给用户可用的术语和短语指数的例子。提到房地产的例子,作为一个用户类型以及……Solr 的自我暗示功能可以返回建议像“高地社区”或“高地牧场。“我们在第十章盖自动建议拼写检查移动设备和时代的人们,拼写校正的支持是至关重要的。再一次,用户希望搜索引擎来处理拼写错误。 Solr 的拼写检查程序支持两种基本模式: ?自动更正- Solr 可以自动拼写校正,根据索引中是否存在拼写错误的词。 ?你的意思- Solr 可以返回一个建议可能产生更好的查询结果,这样您就可以显示一个提示给用户,如 “你的意思高地吗?“如果你在 hilands 用户输入。拼写校正调整在 Solr 4 更容易管理和维护;我们将会看到在第十章这是如何工作的。高亮当搜索大量的文本文件,您可以显示每个文档的特定部分使用 Solr 的 hit-highlighting 特性。最有用的 长格式文件,强调帮助用户找到相关文档突出显示的部分搜索结果匹配用户的查询。部分生成 根据相似度来动态查询。我们在第 9 章介绍。地理空间搜索地理位置是一个一流的概念在 Solr 4 中,它有内置的支持索引纬度和经度值以及排序或排名文档地理 上的距离。Solr 可以发现地理位置距离和类文件(经度和纬度)。在房地产的例子中,匹配清单上显示 用户的互动地图,使用地理空间搜索,可以放大/缩小和移动地图的中心点找到附近的清单。另一个激动人心的除了 Solr 4 就是你可以索引地理形状等多边形,它允许您找到文档地理区域相交。 这可能是有用的在特定的社区使用精确的找到家上市一个社区的地理表示。我们覆盖 Solr 地理空间 的搜索功能在第 15 章。1.4.2。数据建模功能正如我们在 1.1 节中讨论的,Solr 优化处理特定类型的数据。在这节中,我们概述关键特性,可以帮助您 搜索模型数据:?结果分组/领域崩溃 ?灵活的查询支持 ?连接 ?文档聚类 ?进口丰富的文档格式,比如 PDF 和单词 ?从关系数据库导入数据 ?多语言支持结果分组/ field collapsing虽然 Solr 需要统一,规范化的文档,Solr 允许你将多个文档作为一个群体基于一些共同财产的所有文档 组。结果分组, field collapsing,也称为字段允许您返回独特组,而不是单个文件的结果。 field collapsing 的典型例子是螺纹邮件讨论,电子邮件匹配一个特定的查询可以组合在原始邮件开始 谈话的内容。您将了解在 11 章结果分组/ field collapsing。灵活的查询支持Solr 提供了许多强大的查询功能,包括 ?使用条件逻辑,或者,而不是 ?通配符匹配 ?范围查询日期和数字 ?允许一些短语查询条件之间的距离 ?模糊字符串匹配 ?正则表达式匹配 ?函数查询 我们将在第七章介绍他们。连接在 SQL 中,您使用一个连接创建一个关系是从两个或更多的表中获取数据共同使用一个外键等共同财 产。在 Solr,连接更像 SQL 子查询,你不通过加入数据从其他文档构建文档。使用 Solr 连接,您可以返 回子文档匹配您的搜索条件的父母。Solr 的加入是有用的一个例子是返回所有 Twitter 消息的转发到 一个响应。我们将讨论在 15 章文档聚类文档聚类允许您确定组织的文件,是类似的,出现在每个文档的条款。这有助于避免返回许多包含相同 的信息在搜索结果的文档。 例如,如果您的搜索引擎是基于新闻文章从多个 RSS 提要,很有可能你会有 许多文件相同的新闻故事。而不是返回多个结果同样的故事,你可以使用聚类选择一个代表性的故事。 聚类技术在 16 章简要讨论。引进丰富的文档格式,比如 PDF 和 word在某些情况下,您可能想要一群共同的现有文档格式 PDF 和 WORD 和搜索。Solr 这很容易,因为它 Apache Tika 项目集成,支持最流行的文档格式。进口富格式文件覆盖在 12 章简要。从关系数据库导入数据如果您希望搜索的数据与 Solr 在关系数据库中,您可以配置 Solr 使用一个 SQL 查询创建文档。我们 在第 12 章覆盖 Solr 的数据导入处理程序(DIH)。多语种 supporSolr Lucene 的工作有着悠久的历史和多种语言。Solr 已经语言检测建于和提供特定于语言的文本分 析解决方案多种语言。我们将在第 14 章会看到 Solr 的语言检测和多语言文本分析。 1.4.3 新功能在 Solr 4。在我们结束这一章之前,让我们来看看一些激动人心的新功能在 Solr 4。在通常,Solr 4 Apache Solr 社 区是一个巨大的里程碑,因为它解决了许多主要的难点由真实用户发现在过去的几年中。我们选择一 个这里的一些主要特点突出,但我们也会在整个书指出在 Solr 4 新特性。 ?实时搜索 ?与乐观并发原子更新 ?实时获取 ?使用事务日志写耐久性 ?容易使用 zookeeper 分片和复制实时搜索Solr 的接近实时(NRT)搜索功能支持的应用程序有一个高速度文件需要被添加到索引的几秒内搜索。 与,您可以使用 Solr 搜索快速变化的内容如突发新闻来源和社交网络。我们在第 13 章盖 NRT。原子与乐观并发更新原子更新功能允许客户机应用程序添加,更新,删除和增加字段在一个现有的文档,而不必重新发送整 个文档。如果房子的价格在我们的例子中从 1.2 节房地产应用程序更改,我们可以发送一个原子更新 Solr 改变价格领域。您可能想知道如果两个用户试图改变一样同时文档。Solr 防范不兼容更新使用乐观并发性。简而言 之,Solr 使用一个特殊版本字段名为_version_执行安全更新文档的语义。在两个不同的用户尝试更新 同时同一文档,用户提交更新的最后将失效版本字段,所以他们的更新将会失败。原子更新和乐观并发 在第五章介绍。实时获取在这一章的开始,我们声明,Solr 是 NoSQL 技术。 Solr 的实时获取功能绝对符合 NoSQL 方法允许您检 索最新版本的文档使用其独特的标识符,不管文档一直致力于索引。这类似于使用像 Cassandra 这样 的键值存储使用一行键检索数据。Solr 4 之前,文档没有复原,直到它致力于 Lucene 索引。Solr 4 中的实时获取功能,您可以安全地脱钩 检索的需要从提交流程文档的惟一 ID。这可能是有用的,如果你需要更新现有文档后送到 Solr 无需先 做一个承诺。作为我们将在第 5 章中学习,提交可以是昂贵的,可以影响查询的性能。使用事务日志写的耐久性当一个文档发送给 Solr 索引、写入事务日志来防止数据丢失在发生服务器故障。Solr 客户端之间的 事务日志应用程序和 Lucene 索引。 它还在维修中发挥作用实时 get 请求,文档是可收回的不管他们他 们独特的标识符致力于 Lucene。 事务日志可以让 Solr 脱钩更新耐久性从更新可见性。这意味着文档可以持久存储但在搜索结果中不 可见。 这什么时候提交给您的应用程序控制文件中可见搜索结果也不用担心数据丢失在你提交之前如 果服务器失败。我们将讨论耐用和提交策略在第 5 章写道。简单使用 zookeeper 分片和复制如果你新 Solr,你可能没有意识到,扩展 Solr 是以前的版本通常手册和繁琐的过程。SolrCloud,调整也 很简单,自动化因为 Solr 使用 Apache zookeeper 分发配置和管理碎片领导人和副本。Apache 网站 (http://zookeeper.apache.org)描述 zookeeper 员为“集中服务维护配置信息、命名、提供分布式同步, 提供集团服务。”在 Solr,zookeeper 员负责分配碎片领导人和副本和保持跟踪哪些服务器可用的服务请求。SolrCloud, 所以你不需要做任何额外的配置或设置与 SolrCloud 开始。我们将在第 13 章深入的细节 SolrCloud。1.5。总结我们希望你现在有一个好的感觉和用例 Solr 支持什么类型的数据。作为您了解了在 1.1 节,Solrtext-centric 的优化处理数据,read-dominant,面向文档的,灵活的模式。我们还了解到,Solr 等搜 索引擎并不是通用的数据存储和处理的解决方案,但是而是为了权力关键词搜索,排名检索和信息发现。 使用一个虚构的房地产搜索应用程序的例子,我们看到 Solr 构建在 Lucene 添加声明索引配置和基于 web 服务 HTTP、XML 和 JSON。Solr 4 可以支持数以百万计的两个维度文档和 high-query 交通使 用分片和复制。4 没有 SPoF Solr 使用时在一个分布式 SolrCloud 配置。我们还谈到了根据关键利益相关者的角度选择 Solr 理由。我们看到 Solr 地址的软件架构师、系统管 理员甚至是首席执行官。最后,我们介绍一些 Solr 的主要特性和给你的指针的地方去了解更多关于每 个特性在这本书。我们希望你兴奋继续学习关于 S现在下载软件和本地系统上运行它,这正是我们 将在第 2 章。
更多搜索:
All rights reserved Powered by
文档资料库内容来自网络,如有侵犯请联系***。

参考资料

 

随机推荐