Elasticsearch介绍

本章主要内容

  • 理解什么是搜索引擎,以及它们能解决什么样的问题
  • Elasticsearch为何能胜任搜索引擎的工作
  • Elasticsearch典型的使用场景
  • Elasticsearch提供的功能

        如果你想让自己的数据能被搜索,需要处理如下事项:返回相关的搜索结果,返回统计信息,而且要非常快速地完成。这就是Elasticsearch这种搜索引擎存在的意义,因为它们生来就是迎接这些挑战的。它可以在关系型数据库上搭建搜索引擎,建立索引并加速SQL查询的执行。或许,也可以从NoSQL数据存储上建立索引,然后支持搜索功能。可以通过Elasticsearch做到这些,此外由于Elasticsearch里的数据是通过文档形式表示的,它和MongoDB这种面向文档的存储搭配起来也很美妙。Elasticsearch这样的现代搜索引擎还能完好地存储数据,甚至可以将其直接作为带搜索功能的NoSQL数据存储来使用。

Elasticsearch是构建在Apache Lucene之上的开源分布式搜索引擎。Lucene是开源的搜索引擎包,允许你通过自己的Java应用程序实现搜索功能。Elasticsearch充分利用Lucene,并对其进行了扩展,使存储、索引、搜索都变得更快、更容易,而最重要的是,正如名字中的“elastic”所示,一切都是灵活、有弹性的。

关键词搜索,模糊搜索可以提供辅助功能,用于实现更佳的用户体验。这些辅助的功能具体包括识别错误的深入,给出自动对提示,并对结果进行分类。

如果网站上有很多帖子,在其中查找“选举”这个词会非常耗时。你当然不希望用户一直等着。Elasticsearch恰好能帮上忙,因为它是采用Lucene作为底层的。Lucene是个高性能的搜索引擎包,默认情况下会将所有的数据全部进行索引。

这里所说的索引 是一种数据结构,它依据你的数据建造,最终会让搜索变得非常迅速。在大多数据库中,可以使用几种不同的方式为字段添加索引。而Lucene使用的是倒排索引, 这意味着它将创建一个数据结构,并在其中保存记录每个单词出现在哪些数据中的清单。

同时,为了提升搜索的性能和相关性,还需要更多的磁盘空间来存储索引。增加新的博客帖子会越来越慢,因为每次添加数据就要更新索引。对此,调优可以让Elasticsearch无论在索引还是搜索时都变得更快。

接下来有一个难题:如何将真正描述选举的帖子排序在前呢?有了Elasticsearch,就可以使用几个算法来计算相关性的得分(relevancy score) ,然后根据分数来将结果逐个排序。

对于每个符合查询条件的文档,它的相关性得分标示该文档和查询条件的相关程度。例如,一条博客帖子多次出现了“elections”,频率超过了其他的帖子,那么该文章讨论选举相关的话题的可能性就更大。这里我们看下DuckDuckGo的示例,如图1-1所示。

计算文档相关性得分的算法是TF-IDF(term frequency-inverse document frequency,词频-逆文档频率)。

  • 词频-----所查找的单词在文档种出现的次数越多,得分越高
  • 逆文档词频------如果某个单词在所有文档中比较少见,那么该词的权重越高得分也越高

例如:当在自行车爱好者的博客上搜索“自行车竞赛”的时候,因为自行车在所有文档出现的频率要高于“竞赛”,所以对最后的得分的贡献会比较瘦小,同时一篇文章中二者出现的次数越多,这篇文章的得分也会越高

除了选择算法,Elasticsearch还提供了很多其他内置的功能来计算相关性得分,从相关性的角度考虑,帖子的标题比文章主题更为重要。这样标题上相关屁哦诶的文档会比仅仅在主体中匹配的文档获得更高的的饭。你也可以让精确匹配比部分匹配获得更高的得分。

1.1.3 超越精确匹配

最后,Elasticsearch 有些选项可以让搜索变得更直观,而不仅仅是精确匹配用户的输入。当用户录入与已存储词有所不同的错误拼写、同义词或派生词时,这些选项使用起来非常方便。当用户不完全清除搜索什么的时候,这些选项可以帮到他们。

1. 处理错误的拼写

可以通过配置,让Elasticsearch容忍一些变化,而不仅仅是只查找精确匹配。使用模糊查询,“bicycel”的输入同样可以让用户找到“bicycles”的博客。

2.支持变体

3.使用统计信息

4. 给予自动提示

当用户开始输入的时候,你可以帮助他们发现主流的查询和结果。还可以通过自动提示技术预测他们所要输入的内容,就像web上很多搜索引擎做的那样,你同样可以展示主流的结果,通过特殊的查询类型来匹配前缀、通配符或正则表达式。

为了理解Elasticsearch是如何融入更大的系统中的,来考虑下3中典型的应用场景。

1.将Elasticsearch作为网站的主要后端功能。可以使用Elasticsearch存储所有和帖子相关的数据。并处理查询请求。

2. 将Elasticsearch添加到现有系统

3. 将Elasticsearch 作为现有解决方案中的后端部分-------因为Elasticsearch是开源的系统,并且提供了直接的HTTP接口,现有一个大型的生态系统在支持它。例如: Elasticsearch在日志集中应用广泛。考虑到现有工具可以写入和读取ElasticSearch,你可以不必进行任何开发。

1.2.1 将Elasticsearch作为主要的后端系统

传统意义上,搜索引擎在完善的数据存储的基础上部署,用于提供快速和相关的搜索能力。这是因为历史上的搜索引擎没有提供持久化存储以及类似统计的其他常用功能。

Elasticsearch是一个现代搜搜哦引擎,提供了持久化存储、统计和很多其他数据存储的特性。就像其他的NoSQL数据存储,Elasticsearch并不支持事务。

如果一台服务器宕机了会发生什么,可以通过将数据复制到不同的服务器来达到容错的效果。很多其他特性是的Elasticsearch 成为了一个很有吸引力的NoSQL数据库存储。

1.2.2 将Elasticsearch添加到现有的系统

Elasticsearch 不会提供数据存储功能,Elasticsearch 还不支持事务和复杂关系的特性,一般实在现有的系统中加入Elasticsearch,让它和现有模块协同工作。

无论哪种方式,如果你有两个数据存储,必须想方设法保持他们的同步,根据主要数据存储是什么类型,以及数据时如何布局规划的,可以部署一个Elasticsearch插件,保持两者同步。

1.2.3 Elasticsearch的主要特性

Elasticsearch 让你可以轻松的使用Lucene的索引功能,并搜索数据。在索引步骤中,有很多的选项,可以设置如何处理文本,如何存储处理后的文本。在搜索的时候,有很多查询和过滤器供选择。Elasticsearch通过REST API显露了很多功能,让用户可以构建JSON格式的查询,调整大多数的配置。

 

在很多用例中,用户会基于多项条件进行搜索。例如,可以在多个字段中搜索多个关键词;一些条件是必需的,一些条件是可选的。Elasticsearch最为人赏识的一个特性是结构合理的REST API:可以通过JSON构建查询,使用很多方式来结合不同类型的查询。

基于JSON的搜索可以同时包含查询、过滤器和聚集,聚集从匹配的文档中生成统计数据。

1.2.5 在Elasticsearch中组织数据

关系型数据库以记录和行的形式存储数据,Elasticsearch以文档的形式存储数据。关系型数据表的行都有很多列,每一行的每一列拥有一个值。每个文档拥有键和值,方式差不多。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值