ElasticSearch系列(三)--基本概念和基于kibana的操作详解

基本概念

基本概念

es是面向文档的搜索引擎,其和mysql的对比如下

mysqles
数据库database索引(indices)
表(table)types(慢慢会被启用)
行 --user :小明,id:1documents(文档)
字段fields

物理设计

集群
es在后台把每个索引划分成多个分片,每个分配可以在集群中的不同服务器间迁移.
实际上,一个es就是一个集群,只是我们只安装了一个es,如下:
在这里插入图片描述
默认的集群名称就是elaticsearch

节点和分片
一个集群至少有一个节点,每一个节点就是一个es进程,节点有多个默认索引,每个索引又有默认的五个分片,每一个主分片又有一个副本.
在这里插入图片描述

如上图,是一个有三个节点的集群,可以看到主分片和对应的复制分片不在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失.实际上,一个分片是一个Lucenen索引,也即倒排索引

什么是倒排索引?
如图所示,就是将文章进行分词,用词来映射文章
在这里插入图片描述

索引基本操作

  • 创建索引

PUT /{index}/_doc/{id}
{
“”:"",

}
在这里插入图片描述

  • 创建映射

PUT /index
{
“properties”:{
“mappings”:{
“name”:{
“type”:“text”
}
}
}
}
在这里插入图片描述

- 修改索引

POST _update方式的方式与直接用PUT 方式的区别在于,
_update 只会修改需要更新的地方
put 如果没传值,原先的记录就会不见

POST /test/type/1/_update
{
  "doc":{
    "name":"lisi2",
    "age":"153"
  }
}
  • 删除索引

DELETE /test

文档操作

在查询前先创一个索引,多存几个用户的信息

普通查询操作

  • 匹配查询:(根据name=lisi进行匹配)
    GET /test/user/_search?q=name:lisi

模糊查询

GET /test/user/_search?
{
  "query": {
    "match": {
      "name": "张三"
    }
  }
}

可以看到有一个score,即匹配分值
在这里插入图片描述

排序

根据年龄排序

GET /test/user/_search?
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}

分页查询

关键字:from,size

GET /test/user/_search?
{
  "query": {
    "match": {
      "name": "张三"
    }
  },
  "_source": ["name"],
  "from": 0,
  "size": 1
}

多条件查询

必须满足条件:

GET /test/user/_search?
{
  "query": {
     "bool": {
       "must": [
         {
           "match": {
              "name":"张三"
           }
         },
         {
           "match": {
             "age": "19"
           }
         }
       ]
     } 


   }
}

满足其中一个:

GET /test/user/_search?
{
  "query": {
     "bool": {
       "should": [
         {
           "match": {
              "name":"张三"
           }
         },
         {
           "match": {
             "age": "19"
           }
         }
       ]
     } 


   }
}

非查询

关键字:must_not,
只要名字不是张三

GET /test/user/_search?
{
  "query": {
     "bool": {
       "must_not": [
         {
           "match": {
              "name":"张三"
           }
         }
       ]
     } 


   }
}

过滤查询

关键字:filter
其中,
gt ----大于
gte ----大于等于
lt —小于
lte --小于等于

GET /test/user/_search?
{
  "query": {
     "bool": {
       "must_not": [
         {
           "match": {
              "name":"张三"
           }
         }
       ],
       "filter": [
         {
           "range": {
             "age": {
               "gte": 10
             }
           }
         }
       ]
     } 
   }
}

倒排精确查找!

term 查询是直接通过倒排索引指定的词条进行精确查找

关于分词:

  • term 直接精确查
  • match 会先用分词器进行分词,再查询
GET /test1/user/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "term": {
            "name": {
              "value": "张三"
            }
          }
        }
      ]
    }
  }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值