ElasticSearch 学习笔记总结(一)

一、 数据的 分类

结构化数据: 像表格、字段等都属于结构化数据,一般存储在 SQL数据库 中。缺点:一点结构固定,很难再去拓展。

非结构化数据: 像报表、图片、通讯记录、日志、视频等等都属于非结构化数据,一般存储在 NoSQL数据库 中。缺点:这些数据维度广、数据量大,对于数据存储和查询维护起来成本很大。

半结构化数据:html、xml这样的文件 属于半结构化数据。

简而言之,ElasticSearch就是用来处理这几种数据类型的。

二、 ElasticSearch 介绍

在这里插入图片描述
ES是一个开源的高扩展的分布式的全文搜索引擎。

Lucene是Apache软件基金会Jakarta项目组的一个子项目,提供了简单强大的应用程式接口,能够做全文检索和搜索,Lucene是基于java研发的,而ES就是基于Lucene的

Elasticsearch是面向文档型数据库,一条数据在这里就是一个文档。
在这里插入图片描述

使用案例:
在这里插入图片描述
在这里插入图片描述

三、 ElasticSearch 搭建

ES官方:https://www.elastic.co/cn/

下载安装,启动。
在这里插入图片描述
启动过程中,可能会遇到各种问题,常见的几个情况:

  • jdk版本低。
  • 内存空间不足,以下为解决方式。
    在这里插入图片描述
  • 再个就是不能以root用户进行登录。创建或使用其他用户,注意要赋予用户权限。

四、正排索引 和 倒排索引

两种索引类型:

  • 正排(正向)索引:
    在这里插入图片描述
  • 倒排索引。
    在这里插入图片描述

五、ES HTTP 索引 操作

创建索引:(等同于创建数据库)

  • 发送put请求。
    例如:http://127.0.0.1:9200/shopping 。
    请求后面的shopping就是索引名称。(rest风格)

在这里插入图片描述

获取索引信息:

  • 只需要将方法换成get就可以。

查询所有索引信息:

  • http://127.0.0.1:9200/_cat/indices?v (v是一个参数)

删除索引:

  • 只需要将方法换成delete就可以。

六、ES HTTP 文档 操作

幂等性操作都可以发送put请求。

幂等性: 所谓的幂等性,是分布式环境下的一个常见问题,一般是指我们在进行多次操作时,所得到的结果是一样的,即多次运算结果是一致的。

创建文档:

  • 发送Post请求:
    http://127.0.0.1:9200/shopping/_doc 。
    注意:body请求体不能为空。
  • 还可以自定义id:
    http://127.0.0.1:9200/shopping/_doc/1001
    也可以发送Put请求(幂等性)
    还可以通过_create访问:http://127.0.0.1:9200/shopping/_create/1002

查询文档:

  • 同上发送get请求:
    http://127.0.0.1:9200/shopping/_doc/1001 后面跟的是_id。

查询当前索引下的所有文档:

  • 发送get请求,访问_search路径:
    http://127.0.0.1:9200/shopping/_search

全量文档修改:(全部修改)

  • 发送put请求:(幂等性)
    http://127.0.0.1:9200/shopping/_doc/1001

局部文档修改:(局部修改)

  • 发送post请求:
    http://127.0.0.1:9200/shopping/_update/1001 (使用_update方便知道调用的局部修改。)
    在这里插入图片描述

删除文档:

  • 发送delete请求:
    http://127.0.0.1:9200/shopping/_doc/1001

七、ES HTTP 查询数据

1. 条件查询

get方法直接查询:(有点麻烦,并且参数放到url里面容易乱码)

# get方法直接查询:(有点麻烦,并且参数放到url里面容易乱码)
http://127.0.0.1:9200/shopping/_search?q=category:小米

post方法:(推荐使用)
在这里插入图片描述
直接发送match_all不传参数就可以查询全部:

{
    "query":{
        "match_all":{

        }
    }
}

2. 分页查询

只需要修改对应参数:

{
    "query":{
        "match_all":{

        }
    },
    "from":0, // from从第几页开始, 也就是页码
    "size":2, // 一页多少数据
    "_source":["title"] // 负责控制返回值_source(里面存着数据的属性),这样就只返回了title属性。
}

3. 排序查询

{
    "query":{
        "match_all":{

        }
    },
    "from":0,
    "size":2,
    "_source":["title"],
    "sort":{ // sort负责定义排序操作
        "price":{ // 指定哪个属性
            "order":"desc" // 排序方式
        }
    }
}

4. 多条件查询

Post请求如下:

{
    "query":{
        "bool" : {
        	// 必须匹配的内容中的每一条。
            "must":[
                {
                    "match":{
                        "category":"小米"
                    }
                },
                {
                    "match":{
                        "price":1999.00
                    }
                }
            ],
            // 符合下面其中一个即可
            "should":[
                {
                    "match":{
                        "category":"华为"
                    }
                },
                {
                    "match":{
                        "price":1999.00
                    }
                }
            ],
            // 过滤相关数据
            "filter":[
                {
                    "range":{
                        "price":{
                            "gt":5000
                        }
                    }
                }
            ]
        }
    }
}

5. 全文检索 完全匹配 高亮显示

http://127.0.0.1:9200/shopping/_search

全文检索匹配:会进行分词的效果,所有包含 ’ 小 ’ 和 ’ 米 '的都进行匹配出来。

{
    "query" : {
    	// 全文检索匹配
        "match" : {
            "category" : "小米"
        }
    }
}

完全匹配:完全进行匹配出来。

{
    "query" : {
    	// match_phrase是完全匹配。
        "match_phrase" : {
            "category" : "小米1"
        }
    }
}

高亮显示:

{
    "query" : {
        "match_phrase" : {
            "category" : "小米"
        }
    },
    // 高亮显示效果。
    "highlight": {
        "fields" : {
            "category" : {}
        }
    }
}

在这里插入图片描述

6. 聚合查询

聚合查询就是 一些像求和,多少数量,平均值等一系列的情况。

{
    "aggs" : { // 聚合操作
        "price_group" : { // 名称,随意起名 求平均值用price_avg
            "terms" : { // 分组
                "field" : "price" // 分组字段
            }
        }
    },
    "size" : 0 // 如果只需要聚合数据,不需要原始数据,直接讲size设置为0就可以了。
}

八、 ES HTTP 映射

http://127.0.0.1:9200/user/_mapping

指定某些属性为特殊情况:

{
    "properties" : {
        "name" : {
            "type" : "text",
            "index" : true
        },
        "sex" : {
            "type" : "keyword", // keyword关键字,查询就要精确查询。
            "index" : true
        },
        "tel" : {
            "type" : "keyword", // 关闭关键字就不会了。
            "index" : false
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xupengboo

你的鼓励将是我创作最大的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值