Elasticsearch简介和restAPI

Elasticsearch也是基于Lucene的全文检索库,本质也是存储数据,很多概念与MySQL类似的。

对比关系:

索引(indices)--------------------------------Databases 数据库

​    类型(type)-----------------------------Table 数据表

​         文档(Document)----------------Row 行

​           字段(Field)-------------------Columns 列 

 

Elasticsearch具备以下特点:

- 分布式,无需人工搭建集群(solr就需要人为配置,使用Zookeeper作为注册中心)
- Restful风格,一切API都遵循Rest原则,容易上手
- 近实时搜索,数据更新在Elasticsearch中几乎是完全同步的。

另外,在SolrCloud中,有一些集群相关的概念,在Elasticsearch也有类似的:
- 索引集(Indices,index的复数):逻辑上的完整索引
- 分片(shard):数据拆分后的各个部分
- 副本(replica):每个分片的复制
要注意的是:Elasticsearch本身就是分布式的,因此即便你只有一个节点,Elasticsearch默认也会对你的数据进行分片和副本操作,当你向集群添加新数据时,数据也会在新加入的节点中进行平衡。

 

创建索引:

- 请求方式:PUT

- 请求路径:/索引库名

- 请求参数:json格式:

  ```json
  {
      "settings": {
          "number_of_shards": 3,
          "number_of_replicas": 2
        }
  }
  ```

  - settings:索引库的设置
    - number_of_shards:分片数量
    - number_of_replicas:副本数量

删除索引:

DELETE  /heima

查看索引:

GET  /heima

接着创建映射

PUT /索引库名/_mapping/类型名称
{
  "properties": {
    "字段名": {
      "type": "类型",
      "index": true,
      "store": true,
      "analyzer": "分词器"
    }
  }
}

PUT /heima/_mapping/goods
{
  "properties": {
    "title":{
      "type" : "text",
      "analyzer" : "ik_max_word"
    },
    "image":{
      "type" : "keyword",
      "index" : false
        
    },
    "price":{
      "type" : "float"
    }
  }
}

通过POST请求,可以向一个已经存在的索引库中添加数据。 

简单新增

POST /heima/goods/
{
    "title":"小米手机",
    "images":"http://image.leyou.com/12479122.jpg",
    "price":2699.00

查询所有

GET heima/_search
{
  "query": {"match_all":{}}
}

根据id查询单个

GET heima/goods/1

不加映射也能智能推断保存数据

但是关于String

实验:post 大米手机 超大米手机 小米手机 红米手机

查询到四个,因为映射了有分词器并且默认是or

改成and后查询到两个

term查询精确查询,这里的大米手机相当于一个词条,只匹配不分词条的字段(除text外的字段),所有查询到0个

查询到4个

因为手机作为一个词条 能匹配到已经分好词后的大米手机,小米手机等

结果过滤

对搜索完的结果返回的数据进行过滤,includes/excludes选一

`fuzzy` 查询是 `term` 查询的模糊等价。有一定的容错,能查出apple手机

range对数值字段进行范围查询

bool /must 多个条件同时满足

bool /should 多个条件满足一个即可

bool /must_not 多个条件同时不满足

当多个条件时价格应是一个过滤条件,不应该影响查询后的得分

所以上面写的不合适

bool /must,filter各一个条件这样不影响得分不影响高亮

查询排序分页

聚合

桶:

桶的作用,是按照某种方式对数据进行分组,每一组数据在ES中称为一个`桶`

Elasticsearch中提供的划分桶的方式有很多:

- Date Histogram Aggregation:根据日期阶梯分组,例如给定阶梯为周,会自动每周分为一组
- Histogram Aggregation:根据数值阶梯分组,与日期类似
- Terms Aggregation:根据词条内容分组,词条内容完全匹配的为一组
- Range Aggregation:数值和日期的范围分组,指定开始和结束,然后按段分组

-Avg Aggregation:数值的平均值聚合

度量(metrics)

分组完成以后,我们一般会对组中的数据进行聚合运算,例如求平均值、最大、最小、求和等,这些在ES中称为`度量`

**注意**:在ES中,需要进行聚合、排序、过滤的字段其处理方式比较特殊,因此不能被分词。

- Terms Aggregation:按照生产商分组

在按照生产商分组的前提下计算每组的平均值 

查询聚合一块使用,聚合需要的数据是查询得到的数据

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章