Elasticsearch学习笔记

Elasticsearch学习资料

概念:Elasticsearch 分布式全文搜索(搜索工具,效率很高)引擎,近乎实时的存储、检索数据

Elasticsearch (windows)安装

  1. 解压即可使用

  2. 熟悉文件

    bin:启动文件

    config:配置文件目录

    ​ log4j2.properties:日志配置文件

    ​ jvm.options:Java虚拟机相关配置文件

    ​ elasticsearch.yml:ES的配置文件,默认端口 9200 端口!

    lib:相关jar包

    modules:功能模块

    plugins:插件

  3. 启动(双击bin目录下的elasticsearch.bat)

  4. 测试:http://127.0.0.1:9200

  5. 安装Elasticsearch图形化工具 elasticsearch-head-master(前提需要nodejs和cnpm环境)

    ​ 在elasticsearch-head-master的shell名令窗口

    D:\Revolution\software_running\Elasticseach\elasticsearch-head-master>
    cnpm install
    

    启动header-master

    D:\Revolution\software_running\Elasticseach\elasticsearch-head-master>
    npm run start
    

    连接测试发现,存在跨域问题:配置es——elasticsearch.yml

    http.cors.enabled: true
    http.cors.allow-origin: "*"
     
    

在这里插入图片描述

Elasticsearch核心概念

  1. 索引
  2. 字段类型(mapping)
  3. 文档(documents)

elasticsearch 是面向文档的!

关系型数据库和ES的客观对比:一切都是 json

Relational DBElasticsearch
数据库(DateBase)索引(index)
表(Table)types(慢慢会被弃用)
行(Row)Documents(文档)
字段(Columns)Fields

物理设计:

​ elasticsearch 在后台把每个索引划分成多个分片,每个分片在集群中不同的服务器间迁移

逻辑设计:

ES是面向文档(就是一条条数据)的,意味着索引和搜索数据的最小单位是文档,ES中文档有几个重要属性

  • 自我包含,一篇文档同时包含字段和对应的值,key:value
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的!{就是一个json对象}
  • 灵活的结构,文档不依赖预先设定的模式,我们知道关系型数据库中,要提前定义字段才可以使用。在ES中,字段是非常灵活的,有时候,我们可以忽略该字段,或者动态添加一个新的字段。

文档(就是我们的一条条数据)

user
1  里斯   18
2  张三   19

类型

类型是文档的逻辑容器,就像关系型数据库一样,表格是行的容器。比如name映射为字符串类型,我们说文档无模式的,它们不需要拥有映射中所定义的所有字段,比如增加一个新字段,那么ES是怎么做的呢?ES或自动的将字段加入映射,但这个字段不确定它是说明类型,ES就开始猜,如果这个值是18,那么ES就认为它是整数型,但ES可能猜的不对,所以最安全的方式就是提前定义好映射,这点跟关系型数据库殊途同归,先定义好字段,然后再使用,别整说明幺蛾子!

索引

就是数据库

索引就是映射类型的容器,ES中的索引是一个非常大的文档集合。索引存储了类型的字段和其他设置,然后它们被存储到各个分片上

物理设计:节点和分片如何工作
在这里插入图片描述
倒排索引:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
IK分词器
在这里插入图片描述
使用kibana

查看不同的分词效果
在这里插入图片描述
ik_smart 为最少切分

ik_max_word 最细粒度切分,穷尽词库的可能
在这里插入图片描述
自定义的词语,要自行添加到分词器字典中!
在这里插入图片描述

ES花式查询

简单的搜索:

GET kuangshen/user/_search?q=name:李四

复杂查询:

GET /kuangshen/user/_search
{
"query":{
"match":{
"name":"李四"
    }
  }
}

在这里插入图片描述

GET /kuangshen/user/_search
{
"query":{
"match":{
"name":"李四"
    }
  },
  "_source":["name","desc"]   # 结果过滤
  
}
GET /kuangshen/user/_search
{
"query":{
"match":{
"name":"李四"
    }
  },
  "sort":[
  {
  "age":{
  "order":"desc"  # 排序
  }
}
  ]
  
}
**分页查询**
GET /kuangshen/user/_search
{
"query":{
"match":{
"name":"李四"
    }
  },
  "sort":[
  {
  "age":{
  "order":"desc"  # 排序
  }
}
  ],
  "from":0,    # 从那条数据开始
  "size":2		# 单页面大小 
}

# 数据下标还是从0开始

**bool值查询,多条件精确查询**
GET /kuangshen/user/_search
{
  "query":{
  "bool":{
    "must":[
      {
        "match":{
          "name":"狂神"
        }
      },
      {
        "match":{
          "age":23
        }
      }
      ]
  }
} 
}

must:所有的条件都要符合,相当于mysql的and
should: 符合两个条件中的一个,相当于mysql的or
must_not: 不是,相当于mysql的not
 

**Filter过滤查询**
GET /kuangshen/user/_search
{
  "query":{
    "bool": {
      "must": [
        {
          "match": {
            "name": "狂神"
          }
        }
      ],
      "filter": {     # filter 数据过滤
        "range": {
          "age": {
            "gte": 10,
            "lte": 50
          }
        }
      }
    }
  }
}
gt 大于
gte 大于等于
lt 小于
lte 小于等于
**匹配多个条件**
GET /kuangshen/user/_search
{
  "query":{
    "match": {
      "tages": "男 技术"   # 多个条件使用空格隔开即可,只要满足其中一个结果即可被查出
    }
  }
}
**精确查询**
term查询是直接通过倒排索引指定的词条进行精确地查询!
关于分词:
term,直接查找精确地
match,会使用分词器进行分析(先分析文档,然后通过分析的文档进行查询)

两个类型:

text类型:可以被分词器解析

keyword类型:不会被分词器解析
在这里插入图片描述
在这里插入图片描述
高亮查询
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值