基本背景

官方对es的定位是分布式搜索和分析引擎,它专为海量搜索而生.比如想往自己的网站加入一个搜索框,或者做日志的采集和检索时都可以使用es.

MySQL自从引入ngram解析器之后也支持全文搜索,但是它在性能和功能完备性上与es都相去甚远.MySQL是单机强事务的,而es是天然分布式的;MySQL仅支持简单的分词策略,而es可以对搜索结构做复杂的自定义处理.

一些概念

  • Shards: 分片,当索引上的数据量太大的时候,我们通常会将一个索引上的数据进行水平拆分,拆分出来的每个数据库叫作一个分片。
  • index: 索引,类似于MySQL的表,可以约束其内数据的类型和特性
  • settings: 定义了index的分片数,副本数等信息
  • mapping: 定义了index中每个字段的类型,分词器等信息,与setting一起组成index的建表语句
  • type: 7.0之后已经废弃的一个结构
  • document: 文档,类似于MySQL的行,即一条条的数据
  • field: 字段,类似于MySQL的列
  • analyzer: 分词器,决定如何对文档或输入进行拆分.常用的中文分词器是ik.

基础操作

创建索引

一般使用put方法创建索引

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  }
}

可以在创建时带上mapping

PUT /product_info
{
  "settings": {
    "number_of_shards": 5,
    "number_of_replicas": 1
  },
  "mappings": {
    "products": {
      "properties": {
        "productName": {
       "type": "text",
       "analyzer": "ik_smart"
      },
        "annual_rate":{
       "type":"keyword"
      },
        "describe": {
      "type": "text",
      "analyzer": "ik_smart"
    }
      }
    }
  }
}

新建数据

POST /product_info/_bulk
{"index":{}}
{"productName":"大健康天天理财","annual_rate":"3.2200%","describe":"180天定期理财,最低20000起投,收益稳定,可以自助选择消息推送"}
{"index":{}}
{"productName":"西部通宝","annual_rate":"3.1100%","describe":"90天定投产品,最低10000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"安详畜牧产业","annual_rate":"3.3500%","describe":"270天定投产品,最低40000起投,每天收益立即到账消息推送"}
{"index":{}}
{"productName":"5G设备采购月月盈","annual_rate":"3.1200%","describe":"90天定投产品,最低12000起投,每天收益到账消息推送"}
{"index":{}}
{"productName":"新能源动力理财","annual rate":"3.0100%","describe":"30天定投产品推荐,最低8000起投,每天收益会消息推送"}
{"index":{}}
{"productName":"微贷赚","annual_rate":"2.7500%","describe":"热门短期产品,3天短期,无须任何手续费用,最低500起投,通过短信提示获取收益消息"}

查询数据

基本查询

GET /product_info/_search
{
  "query": {
    "match": {
      "describe": "每天收益到账消息推送"
    }
  }
}
//在describe字段上查找包含该关键词的文档

范围查询

GET /product_info/_search
{
  "query": {
    "range": {
      "annual_rate": {
        "gte": "3.0000%",
        "lte": "3.1300%"
      }
    }
  }
}
//查找年化率在3%到3.13%之间的产品

其他复杂的查询语句:

https://n3xtchen.github.io/n3xtchen/elasticsearch/2017/07/05/elasticsearch-23-useful-query-example

https://www.imooc.com/article/71116

删除数据

DELETE /product_info/doc/3

数据类型

  • 字符串类型: keyword(不分词),text(分词)
  • 整数类型: long,integer,short,byte
  • 浮点型: float,half_float,scaled_float
  • 时间类型: date
  • 布尔类型: boolean
  • 二进制类型: binary
  • 区间类型: integer_range,long_range,float_range,double_range,date_range
  • 数组: array
  • 对象: object
  • 嵌套类型: nested
  • 地理位置: geo-point,point,geo-shape
  • ip类型: ip
  • 范围类型: completion
  • 令牌计数类型: token_count
  • 附件类型: attachment
  • 抽取类型: percolator