ElasticSearch 学习笔记总结

Posted IT_Holmes

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
        
    

以上是关于ElasticSearch 学习笔记总结的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch 学习笔记

Elasticsearch学习笔记-02安装

ElasticSearch学习笔记--安装

Elasticsearch学习笔记-03探索集群

Elasticsearch - 尚硅谷(2. Elasticsearch 安装)学习笔记

Elasticsearch学习笔记——安装和数据导入