Category: ElasticSearch

1

ElasticSearch进阶之拼写错误

我们在搜索时经常会出现拼写错误的情况,那ElasticSearch有没有什么可以处理这个问题的技术呢?本文就来介绍两种方法,一种是查询时候的模糊匹配(Fuzzy matching)。另一种是index时候的语音匹配(sounds-like matching/Phonetic Matching)。 模糊匹配概述...

0

ElasticSearch进阶之输入匹配

我们在日常使用搜索引擎的时候会发现随着我们的输入,会出现一些可以选择的提示,如下图所示,我们称之为即时搜索或者输入搜索。本文就来讨论一下,ElasticSearch在这个方面是如何实现的。 就像上图所示的,在我们输入了johnnie walker bl之后,可以立即显示一些建议,比如johnnie walker...

0

ElasticSearch进阶之停用词处理

我想停用词(Stop Words)这个概念对大家来说并不陌生,通常来说,停用词是在一个语言中出现的频率很高的词语(和文本或者语言相关,同样的词在不同的语言中出现的频率可能完全不同),比如我们常见的the, is, and等等,这些词很难进行精确的搜索,也很容易影响搜索的性能。所以在ElasticSearch中可以对他们进行特殊处理,当然ElasticSearch早期对他们进行处理的另外一个主要原因是为了节省磁盘和memory的空间,但是随着时间的推移,单纯从存储空间来看,其实是否要特殊处理可能已经不是很重要了(当然准确的说在位置和偏移信息的保存中,它还是会占用很多存储空间的)。 去除停用词...

0

ElasticSearch进阶之邻近匹配

我们在之前的文章中介绍过标准的文本搜索,它会进行各个关键词的搜索,然后根据TF/IDF来计算相关性,最后再返回结果。这样的搜索能够根据我们搜索的关键词是否在相关的文本中存在来进行匹配,但是这还不够,它忽略了关键词之间的关系。本文就来介绍如何加入关键词之间关系的处理。 引言 我们来看一个例子,现在有下面两个文本: Dog beats...

1

ElasticSearch进阶之多域搜索

我们在使用ElasticSearch真正进行搜索的时候其实很多时候并不是一个简单的term的搜索,而是多个域的组合,比如说我们可能会搜索一本书名为《War and Peach》然后作者是”Leo Tolstoy”的书。本文就来讲解一下ElasticSearch中对常见的多域搜索有哪些实现方法。 简单实现...

0

ElasticSearch进阶之Shard内部揭秘

当我们了解了ElasticSearch的一些基本概念之后,就会自然而然地想去深入了解一下一些ElasticSearch内部的实现,比如说它是如何做到近乎实时的查询的,以及如何处理数据的持久化等等问题。本文就来详细介绍shard内部为这些问题所做的各种优化和实现。 不变性 我们在《ElasticSearch之Analysis介绍》中介绍了为了使得文本可以被搜索,我们需要位置创建inverted Index,关于它的概念我们就不详细介绍了。这里一个很有趣的问题就是不变性。我们说希望写入到磁盘中的Inverted Index不再变化,这样的特性会带来很多好处:...

0

ElasticSearch基础之分布式查询的执行

我们在之前的《ElasticSearch基础之分布式存储》中详细介绍了ElasticSearch是如何进行分布式的读写(CRUD)。那我们在发送查找请求之后,ElasticSearch是如何进行分布式执行的呢?它其实要比我们前面提到的CRUD操作复杂一些,本文就来详细介绍一下这一方面的知识。 前面的CRUD操作其实只是针对某一个shard的,也就是说我们其实是知道我们的操作最终会指向哪一个shard的, 而search相对来说复杂的地方就在于我们根本不知道要查找的内容是存储在哪一个shard上,这就必然导致我们需要去访问每一个shard,或者说至少是我们感兴趣的shard。然后访问不同(所有)shard得到的数据其实只完成了一部分的工作,你还需要把各个shard返回的内容进行整合,排序或者筛选出最终返回给用户的那一部分数据并把它们从各个shard提取出来。因此我们可以简单认为search其实包含了两个部分的操作,一个是查询一个是提取。 查询 查询过程其实说白了也很简单,它在开始的时候会把你的query发送到index上所有的shard(有可能是primary也可能是replica的shard),然后在各个shard上执行查询,并根据相匹配的文档生成一个priority...

2

Elasticsearch基础之相关性介绍

众所周知,Elasticsearch返回的结果其实根据其相关性进行排序的。所以这里就会涉及到一个概念,就是相关性是怎么定义的,也就是说凭什么这个结果的相关性就比另一个结果的相关性好。本文就来针对这个问题详细介绍一下。 什么是相关性 Elasticsearch中的相关性是通过一个浮点的数值_score来显示的,这个_score的值越大,就表示相关性越高。那这个_score的值是如何计算的呢?我们通常在全文本查询的时候,使用的是标准相似算法,它的名字是TF/IDF (term frequency/inverse...

ElasticSearch之Mapping介绍 0

ElasticSearch之Mapping介绍

我们在之前的文章中提到ElasticSearch有三个重要的部分,Analysis,Query SQL以及Mapping。本文就来详细介绍这其中的Mapping。 我们知道假如我们需要解析一个数据的时候,比如“2018-10-01”,我们需要知道这是一个什么类型的数据,比如说这是一个时间数据,那么就可以解析成2018年10月1号,假如它只是一个字符串,那只是一系列字符。所以ElasticSearch是需要知道每个数据域的类型的,而这个类型就是包含在mapping中。 支持的类型 总得来说ElasticSearch支持以下这些简单的类型:...