1、ElasticSearch

全文检索

需求

场景

ES的概述

ElaticSearch,简称为ES, ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器;处理PB级别(大数据时代)的数据。ES也使用Java开发、并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。

据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用

ES提供的功能

ES的适合场景

ES的特点

ES的常见术语

img

Mapping

相当于MySQL的Schema ,是对表(index)结构的定义,所以,在使用表之前,先对需要的表结构进行定义

Mapping的数据类型

属性名字 说明
text 用于全文索引,该类型的字段将通过分词器进行分词,最终用于构建索引
keyword 关键字,不进行分词
long 有符号64-bit integer:-2^63 ~ 2^63 - 1
integer 有符号32-bit integer,-2^31 ~ 2^31 - 1
short 有符号16-bit integer,-32768 ~ 32767
byte 有符号8-bit integer,-128 ~ 127
double 64-bit IEEE 754 浮点数
float 32-bit IEEE 754 浮点数
half_float 16-bit IEEE 754 浮点数
boolean true,false
date 日期类型
binary 该类型的字段把值当做经过 base64 编码的字符串,默认不存储,且不可搜索

类型自动识别

ES 类型的自动识别是基于 JSON 的格式,如果输入的是 JSON 是字符串且格式为日期格式,ES 会自动设置成 Date 类型;当输入的字符串是数字的时候,ES 默认会当成字符串来处理,可以通过设置来转换成合适的类型;如果输入的是 Text 字段的时候,ES 会自动增加 keyword 子字段,还有一些自动识别如下图所示

类型 规则
字符串 匹配到日期格式,设置成Date。 字符串为数字时,当成字符串处理,但我们设置转换为数字。 其他情况,类型就是Text,并且会增加keyword的子字段
布尔值 Boolean
浮点数 Float
整数 Long
对象 Object
数组 由第一个非空数值的类型决定
空值 忽略

指定表中字段的类型

PUT /index_
{
  "mappings": {
    "properties": {
      "key":{
        "type": "type_name"
      }
    }
  }
}

相比MySQL的索引的优点(面试题)