说:Redis简单,知道Key就可以,但如果其他人问你说我不知道Key,我只是知道大概的值,如何提升效率?
说:MySQL在某些常用列上,添加索引,使用索引来提升查询效率,问你:没有使用索引的列,如何快速查询?
解决方案:
ElaticSearch,简称为ES, ES是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器;处理PB级别(大数据时代)的数据。ES也使用Java开发、并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
据国际权威的数据库产品评测机构DB Engines的统计,在2016年1月,ElasticSearch已超过Solr等,成为排名第一的搜索引擎类应用
索引:就是关系型数据库中的数据库
类型:就是关系型数据库中的表
文档:就是关系型数据库中表中的一行数据(Document),文档
属性:一行数据的列(字段)
相当于MySQL的Schema ,是对表(index)结构的定义,所以,在使用表之前,先对需要的表结构进行定义
属性名字 | 说明 |
---|---|
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"
}
}
}
}
like %
导致索引失效,而ES靠关键词