Elasticsearch

什么是Elasticsearch

Elasticsearch是一个分布式搜索服务,提供Restful API,底层基于Lucene,采用多shard的方式保证数据安全,并且提供自动resharding的功能。

数据存储

Elastcisearch 是分布式的文档存储。它能以实时的方式将数据序列化成为json文档来存储。

索引

  • 全文本数据每个字段都设置专用倒排索引
  • 数值与位置数据使用BKD树(A Dynamic Scalable kd-Tree,用来索引多维点数据)

Elasticsearch能自动判断field类型并建立合适的索引,也可以定制mapping的方式来设置不同field的索引规则。

Elasticsearch与传统关系型数据库的关系

Elasticsearch 关系型数据库
index DB
type table
Document row
Field column

相似度计算方法

默认情况下,返回结果按相关性倒序排列,Elasticsearch 的相似度算法被定义为检索词频率/反向文档频率:

  • 检索词频率 检索词在该字段出现的频率越高,相关性也越高。
  • 反向文档频率 每个检索词在索引中出现的频率越高,相关性越低。检索词出现在多数文档中会比出现在少数文档中的权重更低。
  • 字段长度准则 长度越长,相关性越低。 检索词出现在一个短的 title 要比同样的词出现在一个长的 content 字段权重更大。

单个查询可以联合使用 TF/IDF 和其他方式,比如短语查询中检索词的距离或模糊查询里的检索词相似度。

模糊查询

以编辑距离衡量模糊性,查询时使用 fuzziness参数设置最大编辑距离,默认为2。模糊匹配不参与评分,只在有拼写错误时扩大匹配项的范围。

Reference

Elasticsearch: 权威指南