美文网首页elastic...
es核心知识篇二:安装使用

es核心知识篇二:安装使用

作者: codeMover | 来源:发表于2021-02-25 16:01 被阅读0次
1. 在docker中安装es
安装docker-compose详见附件
docker-compose up -d  //控制台启动es -d后台启动

2. 简单集群管理

  1. 快速检查集群的健康状况

    GET /_cat/health?v 集群健康情况.png status状态枚举的含义:
  • green:每个索引的primary shard和replica shard都是active
  • yellow:每个索引的primary shard都是active,但是部分replica shard不是active,处于不可用状态
  • red:不是所有索引的primary shard都是active的,部分索引有数据丢失。
  1. 快速查看集群中有哪些索引
    GET /_cat/indices?v
  2. 简单的索引操作
    创建索引:PUT /test_index?pretty
    删除索引:DELETE /test_index?pretty

商品的CRUD操作

1)新增商品:新增文档,建立索引

put /index/type/id

put /ecommerce/product/1
{
  "name":"gaolujie yagao",
  "desc":"gaolujie meibai",
  "price":30,
  "producer":"gaolujie producer",
  "tag":["meibai","fanzhu"]
}

put /ecommerce/product/2
{
  "name":"jiajeishi yagao",
  "desc":"youxiao fangzhu",
  "price":25,
  "producer":"jiajieshi producer",
  "tag":["fanzhu"]
}

put /ecommerce/product/3
{
  "name":"zhonghau yagao",
  "desc":"caoben zhiwu",
  "price":40,
  "producer":"zhonghua producer",
  "tag":["qingxin"]
}

es会自动建立index和type,不需要提前建立,而且es默认会对document每个field都建立倒排索引,让其可以被搜索

2)查询商品:检索文档

GET /index/type/id

GET /ecommerce/product/3

3)修改商品:替换文档

put /ecommerce/product/3
{
  "name":"zhonghau yagao",
  "desc":"caoben zhiwu",
  "price":40,
  "producer":"zhonghua producer",
  "tag":["qingxin"]
}
文档内容必须全部带上

4)修改商品:更新文档

put /ecommerce/product/3/_update
{
  "doc":{
       "name":"zhonghau yagao",
   }
}

更新传递的部分字段

5)删除商品:删除文档

DELETE /ecommerce/product/3?pretty

多种数据检索

1)query string search

由来:query string search是因为参数都是以http请求的query string来附带的

搜索全部商品:GET /ecommerce/product/_search

搜索商品名称中包含yaogao的商品,而且按照收件降序排序:GET /ecommerce/product/_search?q=name:yagao^sort=price:desc。在生产环境中,几乎很少使用query string search。

took:耗费了几毫秒

time_out:是否超时

_shard:数据拆成了5个分片,所以对于搜索请求,会打到所有的primary shard(或对应它某个的replica shard也可以)

hits.total:查询结果数量,3个document

max_score:docuemnt对于一个search的的相关度的匹配分数,越相关,就越匹配,分数也就越高

hits.hits:包含了匹配搜索的document的详细数据

2)query DSL

DSL:Domain SPecified language 特定领域的语言

http request body:请求体,可以用json的格式来构建查询语法,比较方便,可以构建各种复杂的语法,比query string search肯定强大多了

更加适合生产环境查询

GET /ecommerce/product/_search
-- 查询所有商品
{
  "query":{
    "macch_all":{}
  }
}

-- 查询名字中包含yagao,同时按照价格降序
{
  "query":{
    "match":{
      "name":"yagao"
    }
  },
  "sort":[
    {"prce":"desc"}
  ]
}

-- 查询全部,分页查询,from从哪个商品开始查(从0开始),size查询多少条
{
  "query":{
    "macch_all":{}
  },
  "from":1,
  "size":2
}

-- 查询全部的商品的名称和价格
{
  "query":{
    "macch_all":{}
  },
  "_spurce":["name","price"]
}

3)query filter

查询名字包含yagao,价格大于25的商品

GET /ecommerce/product/_search
{
  "query":{
    "bool":{
      "must":{
        "match":{
          "name":"yagao"
        }
      },
      "filter":{
        "range":{
          "price":{
            "gt":25
          }
        }
      }
    }
  }
}

4)full-text query 全文检索

会对输入的字符进行拆解,建立倒排索引。按照score排分进行降序输出

GET /ecomerce/product/_search
{
  "query":{
    "match":{
      "producer":"yagao producer"
    }
  }
}

5)phrase query 短语搜索

跟全文索引相对应,相反,全文检索会将输入的搜索串拆解开来,去倒排索引里面意义匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回。phrase search:要求输入的搜索串,必须在指定的字段中,完全包含一模一样的,才能算匹配,才能作为结果返回

GET /ecomerce/product/_search
{
  "query":{
    "match_phrase":{
      "producer":"yaogao producer"
    }
  }
}

6)highlight search 高亮搜索结果

GET /ecomerce/product/_search
{
  "query":{
    "match_phrase":{
      "producer":"yagao producer"
    }
  },
  "highlight":{
    "fields":{
      "producer":{}
    }
  }
}

聚合分析

1)计算每个tag下的商品数量

"size":0, 不需要输出原source信息

GET /ecomerce/product/_search
{
  "size":0,
  "aggs":{
    "group_by_tags":{
      "terms":{
        "field":"tags"
      }
    }
  }
}

0)将文本field的fielddata属性设置为true

PUT /ecommerce/_mapping/product
{
  "properties":{
    "tags":{
      "type":"string",
      "fielddata":true
    }
  }
}

2)搜索+聚合

GET /ecomerce/product/_search
{
  "size":0,
  "query":{
    "match":{
      "name":"yagao"
    }
  },
  "aggs":{
    "group_by_tags":{
      "terms":{
        "field":"tags"
      }
    }
  }
}

3)先分组,再算每组的平均值,计算每个tag下的平均商品价格

GET /ecomerce/product/_search
{
  "size":0,
  "aggs":{
    "group_by_tags":{
      "terms":{
        "field":"tags"
      },
      "aggs":{
        "avg_price":{
          "avg":{
            "field":"price"
          }
        }
      }
    }
  }
}

4)先分组,再算每组的平均值,计算每个tag下的平均商品价格,按照平均价格降序输出

GET /ecomerce/product/_search
{
  "size":0,
  "aggs":{
    "group_by_tags":{
      "terms":{
        "field":"tags",
        "order":{
          "avg_price":"desc"
        }
      },
      "aggs":{
        "avg_price":{
          "avg":{
            "field":"price"
          }
        }
      }
    }
  }
}

5)按照指定的价格范围进行分组,然后在每组内再按照tag进行分组,最后再计算魅族的平均价格

GET /ecomerce/product/_search
{
  "size":0,
  "aggs":{
    "group_by_price":{
      "terms":{
        "field":"price",
        "ranges":[
          {"from":0,"size":20},
          {"from":20,"size":40},
          {"from":40,"size":50},
        ]
      },
      "aggs":{
        "group_by_tags":{
          "terms":{
            "field":"tags"
          },
          "aggs":{
            "average_price":{
              "avg":{
                "field":"price"
              }
            }
          }
        }
      }
    }
  }
}

附录

version: '2.2'
services:
  cerebro:
    image: lmenezes/cerebro:0.8.3
    container_name: cerebro
    ports:
      - "9000:9000"
    command:
      - -Dhosts.0.host=http://elasticsearch:9200
    networks:
      - es7net
  kibana:
    image: docker.elastic.co/kibana/kibana:5.0.0
    container_name: kibana7
    environment:
      - I18N_LOCALE=zh-CN
      - XPACK_GRAPH_ENABLED=true
      - TIMELION_ENABLED=true
      - XPACK_MONITORING_COLLECTION_ENABLED="true"
    ports:
      - "5601:5601"
    networks:
      - es7net
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.0.0
    container_name: es7_01
    environment:
      - cluster.name=geektime
      - node.name=es7_01
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data1:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    networks:
      - es7net
  elasticsearch2:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.0.0
    container_name: es7_02
    environment:
      - cluster.name=geektime
      - node.name=es7_02
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - discovery.seed_hosts=es7_01,es7_02
      - cluster.initial_master_nodes=es7_01,es7_02
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - es7data2:/usr/share/elasticsearch/data
    networks:
      - es7net


volumes:
  es7data1:
    driver: local
  es7data2:
    driver: local

networks:
  es7net:
    driver: bridge

相关文章

  • es核心知识篇二:安装使用

    1. 在docker中安装es 2. 简单集群管理 快速检查集群的健康状况GET /_cat/health?v集群...

  • es6-selfnote

    ECMAScript6(ES6)基础知识及核心原理 使用Babel编译ES6 一、下载安装Babel环境:需要电脑...

  • Laravel 使用 laravel/scout - elast

    ElasticSearch安装 es的安装,参考macOs-安装ES这篇文章 安装laravel使用es的包,我的...

  • es核心知识篇三:es特性

    1. Es对复杂分布式机制的透明隐藏特性 es是一套分布式机系统,分布式是为了应对大数据量 隐藏复杂的分布式机制 ...

  • es核心知识篇一:核心知识介绍

    1. 什么是搜索 搜索就是在任何场景下,找寻你想要的信息,输入搜索关键字,搜到关键字相关的信息。 站内搜索互联网搜...

  • 一周掌握 ES6 核心知识,第一天

    一周掌握ES6核心知识 第一天 ES6转化ES5的环境设置 任务1,基础教程 目录结构 安装依赖详解 webpac...

  • ELK

    目录 一、ELK介绍二、ELK安装准备工作三、安装es四、 配置es五、curl查看es六、安装kibanan七、...

  • 中文分词工具(LAC) 试用笔记

    一、背景 笔者2年前写过一篇《PHP使用elasticsearch搜索安装及分词方法》的文章,记录了使用ES的分词...

  • 让 Node.js 支持 ES6 的语法

    为了让 Node.js 支持 ES6 的语法, 需要使用 Babel。 安装 es-checker 在使用 Bab...

  • fetch 数据请求

    安装 使用 npm 安装 whatwg-fetch 和 es6-promisenpm install what...

网友评论

    本文标题:es核心知识篇二:安装使用

    本文链接:https://www.haomeiwen.com/subject/wirufltx.html