栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Elasticsearch教程-入门

Elasticsearch教程-入门

一、elasticsearch是什么?

全文搜索属于最常见的需求,开源的 Elasticsearch是目前全文搜索引擎的首选。它可以快速地储存、搜索和分析海量数据。维基百科、Stack Overflow、Github 都采用它。
Elasticsearch的底层是开源库 Lucene。但是,你没法直接用 Lucene,必须自己写代码去调用它的接口。Elasticsearch是 Lucene 的封装,提供了 REST API 的操作接口,开箱即用。
官网:https://www.elastic.co/cn/elasticsearch

二、为什么用elasticsearch?

优点

  • 开箱即用,天生集群
  • 横向扩展性。只需要增加一台服务器,做一点配置,启动一下ES进程就可以并入集群。
  • 分片机制提供更好的分布性。:同一个索引分成多个分片(sharding),分而治之的方式来提供处理效率。
  • 高可用。提供复制(replica),一个分片可以设置多个复制分片,使得某台服务器宕机的情况下,集群仍旧可以照常运行;
  • 速度快,负载能力强,在面对海量数据时候,搜索速度极快。

缺点

  • 各节点数据的一致性问题。其默认的机制是通过多播机制,同步元数据信息,但是在比较繁忙的集群中,可能会由于网络的阻塞,或者节点处理能力达到饱和,导致各数据节点数据不一致——也就是所谓的脑裂问题,这样会使得集群处于不一致状态。目前并没有一个彻底的方案来解决这个问题,但是可以通过参数配置和节点角色配置来缓解这种情况。

  • 没有细致的权限管理。也就是说,没有像mysql那样的分各种用户,每个用户又有不同的权限。所以在操作上的限制需要自己开发一个系统化来完成。

三、怎么用elasticsearch? 1. 索引
操作名称请求方式请求地址
创建索引puthttp://localhost:9200/shopping
查询单个索引gethttp://localhost:9200/shopping
查询所有索引gethttp://localhost:9200/_cat/indices?v
删除索引deletehttp://localhost:9200/shopping
2. 文档
操作名称请求方式请求地址请求体备注
创建文档posthttp://localhost:9200/shopping/_doc{ "title": "苹果手机", "category": "手机","images": "http://www.google.com", "price": 10999.00}
创建自定义id文档(第一次请求时创建,重复请求时更新)post/puthttp://localhost:9200/shopping/_doc/1001{ "title": "苹果手机", "category": "手机","images": "http://www.google.com", "price": 10999.00}
创建自定义id文档(第一次请求时创建,重复请求时报已存在信息)post/puthttp://localhost:9200/shopping/_create/1002{ "title": "苹果手机", "category": "手机","images": "http://www.google.com", "price": 10999.00}
查询一个文档gethttp://localhost:9200/shopping/_doc/1001
查询所有文档gethttp://localhost:9200/shopping/_search
全量更新文档puthttp://localhost:9200/shopping/_doc/1001{ "title": "三星手机", "category": "手机","images": "http://www.samsung.com", "price": 11999.00}
局部更新文档posthttp://localhost:9200/shopping/_update/1001{"doc": { "title": "三星手机"}}
删除文档deletehttp://localhost:9200/shopping/_doc/1001
带条件查询文档(请求参数)gethttp://localhost:9200/shopping/_search?q=category:手机
带条件查询文档(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match": {"category": "手机"}}}
带条件分页查询文档(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match": {"category": "手机"}},"from": 0,"size": 2}
只查固定标题列查询文档(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match": {"category": "手机"}},"_source": ["title"]}
根据特定字段排序查询文档(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match": {"category": "手机"}},"sort": [{"price": {"order": "desc"}}]}5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。
多条件查询文档(must=且)(请求体)gethttp://localhost:9200/shopping/_search{"query": {"bool": {"must": [{"match": {"category": "手机"}}, {"match": {"price": 10999.00}}]}}}
多条件查询文档(should=或)(请求体)gethttp://localhost:9200/shopping/_search{"query": {"bool": {"should": [{"match": {"title": "苹果手机"}}, {"match": {"title": "三星手机"}}]}}}
范围查询文档(filter)(请求体)gethttp://localhost:9200/shopping/_search{"query": {"bool": {"should": [{"match": {"title": "苹果手机"}}, {"match": {"title": "三星手机"}}], "filter": {"range": {"price":{"gt": 11000}}}}}}
完全匹配查询文档(match_phrase)(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match_phrase": {"title": "三星手机"}}}
对结果高亮显示查询文档(hightlight)(请求体)gethttp://localhost:9200/shopping/_search{"query": {"match_phrase": {"title": "三星手机"}}, "highlight":{"fields": {"title": {}}}}只能对查询的字段做高亮显示
聚合查询文档(aggs)(请求体)gethttp://localhost:9200/shopping/_search{"aggs": {"price_group": {"terms": {"field": "price"}}}}5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。
聚合不显示原始数据查询文档(size)(请求体)gethttp://localhost:9200/shopping/_search{"aggs": {"price_group": {"terms": {"field": "price"}}}, "size": 0}1、price_group是自定义的名字;2、5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。
聚合平均值查询文档(aggs)(请求体)gethttp://localhost:9200/shopping/_search{"aggs": {"price_avg": {"avg": {"field": "price"}}}}1、price_avg是自定义的名字;2、5.x之后,Elasticsearch对排序、聚合所依据的字段用单独的数据结构(fielddata)缓存到内存里了,但是在text字段上默认是禁用的,如果有需要单独开启,这样做的目的是为了节省内存空间。
  1. 映射
    1)创建索引
    请求方式:put, 请求地址:http://localhost:9200/user
    2)创建关系
    请求方式:put, 请求地址:http://localhost:9200/user/_mapping,请求体如下:
{
    "properties": {
        "name": {
            "type": "text", // 可以被分词
            "index": true // 可以被索引查询
        },
        "sex": {
            "type": "keyword", // 不能够被分词,必须完整匹配
            "index": true
        },
        "tel": {
            "type": "keyword",
            "index": false // 不能够被索引
        }
    }
}

3)查询关系
请求方式:get, 请求地址:http://localhost:9200/user/_mapping
4)增加文档数据
请求方式:put, 请求地址:http://localhost:9200/user/_create/1001,请求体如下:

{
    "name": "张三",
    "sex": "男的",
    "tel": "1111"
}

5)查询文档数据

  • 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
    "query": {
        "match": {
            "name": "张"
        }
    }
}

结果:可以查到数据

  • 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
    "query": {
        "match": {
            "sex": "男"
        }
    }
}

结果:查不到数据。因为sex是keyword类型,不能够被分词,必须完整匹配

  • 请求方式:get, 请求地址:http://localhost:9200/user/_search,请求体如下:
{
    "query": {
        "match": {
            "tel": "1111"
        }
    }
}

结果:查不到数据。因为tel的index是false,该字段不能够被索引

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/581848.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号