搜索引擎优化 pdf(全文搜索什么是全文搜索引擎?搜索云项目不稳定)
优采云 发布时间: 2021-12-29 00:16搜索引擎优化 pdf(全文搜索什么是全文搜索引擎?搜索云项目不稳定)
近日,项目组安排了一项任务。项目中使用了基于 Solr 的全文搜索。但是Solr搜索云项目不稳定,经常查询不到数据,需要手动全同步。
而且还是由其他队伍维护,依赖性太强了。Solr服务一出故障,我们的项目就基本瘫痪了,因为所有的依赖查询都没有结果数据。
所以考虑开发一个适配层。如果 Solr 搜索失败,它会自动切换到新的搜索 ES。其实这个问题可以通过Solr集群或者服务容错设计来解决。
但是不管设计本身的合理性,leader需要开发,所以我从头开始搭建ES服务,因为之前没接触过ES,所以通过这个系列记录了我的开发过程。
本文的整体内容大致如下:
由 ReyCG 精心绘制和提供
什么是全文搜索
什么是全文搜索引擎?百度百科中的定义:
全文搜索引擎是目前应用广泛的主流搜索引擎。它的工作原理是计算机索引程序扫描文章中的每个词,并为每个词建立一个索引,表明该词在文章中的数量和位置。当用户查询时,检索程序会根据预先建立的索引进行检索。搜索并将搜索结果反馈给用户的搜索方法。这个过程类似于通过字典中的搜索词列表查找字符的过程。
从定义上,我们已经可以大致了解全文检索的思想了。为了更详细的讲解,先从生活中的数据说起。
在我们的生活中有两种类型的数据:
当然,有些地方还会有第三种:半结构化数据,如XML、HTML等,可以根据需要处理为结构化数据,也可以提取纯文本作为非结构化数据处理。
根据两种数据类型,搜索分为结构化数据搜索和非结构化数据搜索两种。
对于结构化数据,我们一般可以通过关系数据库(MySQL、Oracle等)的表进行存储和搜索,或者创建索引。
对于非结构化数据,即搜索全文数据,主要有两种方法:
顺序扫描:也可以通过文字名称知道一般的搜索方式,即在顺序扫描中搜索特定的关键字。
比如给你一份报纸,找出报纸上“RNG”这个词出现在什么地方。您肯定需要从头到尾扫描报纸,然后标记关键字出现的部分以及出现的位置。
这种方法无疑是最耗时、效果最差的。如果报纸排版小,版面比较多,甚至是多份报纸,扫一眼后几乎是一样的。
全文搜索:非结构化数据的顺序扫描很慢。我们可以优化它吗?想办法让我们的非结构化数据有一定的结构还不够吗?
对非结构化数据中的部分信息进行提取、重组,使其具有一定的结构,然后对具有一定结构的数据进行搜索,从而达到比较快速搜索的目的。
这种方式构成了全文检索的基本思想。这部分信息是从非结构化数据中提取出来然后重新组织起来的,我们称之为索引。
以阅读报纸为例。我们要关注英雄联盟S8全球总决赛的消息。如果我们都是RNG的粉丝,如何快速找到RNG新闻的报纸和栏目?
全文检索法是从所有报纸的所有版块中提取关键词,如“EDG”、“RNG”、“FW”、“战队”、“英雄联盟”等。
然后对这些关键词进行索引,通过索引我们可以对应出现在关键词中的报纸和栏目。注意目录搜索引擎之间的区别。
为什么要使用全文搜索搜索引擎
之前有同事问我,为什么要用搜索引擎?我们所有的数据都在数据库中,Oracle、SQL Server等数据库也可以提供查询检索或聚类分析功能。直接通过数据库查询还不够吗?
事实上,我们的大部分查询功能都可以通过数据库查询获得。如果查询效率低,还可以通过建立数据库索引、优化SQL等方式来提高效率,甚至可以通过引入缓存来加速数据返回。
如果数据量较大,可以拆分数据库和表来分担查询压力。那为什么还需要全文搜索引擎呢?我们主要分析以下原因:
数据类型
全文索引搜索支持对非结构化数据的搜索,可以更好地快速搜索大量存在的任何词或词组的非结构化文本。
比如谷歌、百度等网站搜索,都是根据网页中的关键字生成索引的。当我们在搜索时输入关键字,他们会返回所有与关键字匹配的网页,即索引;还有常见的项目在应用程序日志中搜索等。
对于这些非结构化数据文本,关系数据库搜索没有得到很好的支持。
索引维护
在一般的传统数据库中,全文搜索是很鸡肋的,因为一般没有人使用数据清单文本字段。
全文搜索需要扫描整个表。如果数据量很大,即使优化了SQL语法,也收效甚微。
索引建立了,但是维护起来也很麻烦。将为插入和更新操作重建索引。
何时使用全文搜索引擎:
Lucene、Solr、ElasticSearch?
目前主流的搜索引擎大概有:Lucene、Solr、ElasticSearch。
图片
他们的索引创建是根据倒排索引的方法来生成索引的,什么是倒排索引?
维基百科:倒排索引(英文:Inverted index),也常被称为倒排索引、倒排文件或倒排文件,是一种索引方法,用于在全文搜索下存储文档中的某个词或一个存储位置的映射。一套文件。它是文档检索系统中最常用的数据结构。
琉森
Lucene 是一个 Java 全文搜索引擎,完全用 Java 编写。Lucene 不是一个完整的应用程序,而是一个代码库和 API,可轻松用于向应用程序添加搜索功能。Lucene 通过简单的 API 提供了强大的功能:
可扩展的高性能指标:
强大、准确、高效的搜索算法:
跨平台解决方案:
Apache 软件基金会:
索尔
Apache Solr 是一个基于名为 Lucene 的 Java 库的开源搜索平台。它以用户友好的方式提供了Apache Lucene的搜索功能。
作为近十年的行业参与者,是一款成熟的产品,拥有强大而广泛的用户群体。
它提供分布式索引、复制、负载平衡查询以及自动故障转移和恢复。如果部署得当,管理得当,它可以成为一个高度可靠、可扩展、容错的搜索引擎。
许多互联网巨头,例如 Netflix、eBay、Instagram 和亚马逊 (CloudSearch) 都使用 Solr,因为它可以索引和搜索多个站点。
主要功能列表包括:
弹性搜索
Elasticsearch 是一个开源(Apache 2 许可)、基于 Apache Lucene 库的 RESTful 搜索引擎。
Elasticsearch 是在 Solr 几年后推出的。它提供了一个分布式、多租户全文搜索引擎,带有 HTTP Web 接口(REST)和非结构化 JSON 文档。
Elasticsearch 的官方客户端库提供 Java、Groovy、PHP、Ruby、Perl、Python、.NET 和 Javascript。
分布式搜索引擎收录
的索引可以分为段,每个段可以有多个副本。
每个 Elasticsearch 节点可以有一个或多个分片,它的引擎也可以充当协调器,将操作委托给正确的分片。
Elasticsearch 可以通过近乎实时的搜索进行扩展。它的主要功能之一是多租户。主要功能列表包括:
Elasticsearch 与 Solr 的选择
由于Lucene的复杂性,一般很少将其作为搜索的首选。排除部分公司需要自己开发搜索框架,底层需要依赖Lucene。
那么在这里我们重点讨论哪个更好?它们之间有什么区别?你应该使用哪一个?
图片
历史比较
Apache Solr 是一个成熟的项目,拥有庞大而活跃的开发和用户社区,以及 Apache 品牌。
Solr 于 2006 年首次发布开源。它长期以来一直统治着搜索引擎领域,是任何需要搜索功能的人的首选引擎。
它的成熟转化为丰富的功能,而不仅仅是简单的文本索引和搜索;如分面、分组、强大的过滤、可插入的文档处理、可插入的搜索链组件、语言检测等。
Solr 多年来一直统治着搜索领域。然后,在 2010 年左右,Elasticsearch 成为市场上的另一种选择。
当时,它远不如 Solr 稳定,没有 Solr 的功能深度,没有分享想法,品牌推广等等。
Elasticsearch虽然很年轻,但也有自己的一些优势。Elasticsearch 建立在更现代的原则之上,针对更现代的用例,旨在更轻松地处理大型索引和高查询率。
另外,因为它太年轻,没有社区可以合作,它可以在没有任何共识或与其他人(用户或开发者)合作,向后兼容,或任何其他更成熟的软件通常必须处理的情况下自由前进。
所以在Solr之前就公开了一些非常流行的功能(比如near real-time search,英文:Near Real-Time Search)。
从技术上讲,NRT 搜索的能力确实来自 Lucene,它是 Solr 和 Elasticsearch 使用的基本搜索库。
具有讽刺意味的是,由于 Elasticsearch 首先公开了 NRT 搜索,人们将 NRT 搜索与 Elasticsearch 联系起来。
尽管 Solr 和 Lucene 是同一个 Apache 项目的一部分,但人们首先会期望 Solr 具有如此苛刻的功能。
功能差异对比
这两个搜索引擎都是流行的高级开源搜索引擎。它们都是围绕核心底层搜索库Lucene构建的,但又有所不同。
像所有事物一样,每个事物都有其优点和缺点,并且根据您的需求和期望,每个事物都可能更好或更糟。
Solr 和 Elasticsearch 都在快速发展,所以不多说,我们来看看它们之间的差异列表:
图片