Elasticsearch7.8入门&地理位置搜索&SpringBoot整合Elasticsearch&Canal同步数据

1.Elasticsearch介绍和安装

1.1 什么是Elasticsearch

搜索?

百度,京东商品,淘宝,旅游

Lucene是一个Java全文检索框架

solr 适合百度这种综合性的搜索

Elasticsearch 实时搜索,数据分析(大厂日志存储到ES,日志分析)

google 百度 bing

Elasctisearch产品线

特点

Elasticsearch应用

GitHub: 2013 年初,抛弃了 Solr,采取 Elasticsearch 来做 PB 级的搜索。 “GitHub 使用Elasticsearch 搜索 20TB 的数据,包括 13 亿文件和 1300 亿行代码”。

维基百科:启动以 Elasticsearch 为基础的核心搜索架构

百度:目前广泛使用 Elasticsearch 作为文本数据分析,采集百度所有服务器上的各类指标数据及用户自定义数据,通过对各种数据进行多维分析展示,辅助定位分析实例异常或业务层面异常。目前覆盖百度内部 20 多个业务线(包括云分析、网盟、预测、文库、直达号、钱包、 风控等),单集群最大 100 台机器, 200 个 ES 节点,每天导入 30TB+数据。

新浪:使用 Elasticsearch 分析处理 32 亿条实时日志。

阿里:使用 Elasticsearch 构建日志采集和分析体系。

Stack Overflow:解决 Bug 问题的网站,全英文,编程人员交流的网站。

1.2 部署与启动

如果看到这个信息证明启动成功

1.3 安装head插件

解压head插件到任意目录(注意和es安装目录区分)

安装grunt

使用cmd进入node js安装目录,然后执行指令 npm install -g grunt -cli 进行安装grunt。

将grunt安装位全局命令。Grunt是基于Node.js的项目构建工具。它可以自动运行您所设定的任务。

 npm install -g grunt -cli 

安装pathhome.js

进入head解压目录,执行npm install 进行安装pathomjs。

运行head

进入head目录启动head,输入以下命令

grunt server

访问Node Exporter

head插件跨域

Elasticearch默认不允许跨域调用,而Elastcisearch-head属于前端工程,所以报错。

修改Elasticearch.yml中配置

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

1.4 安装kibana

kibana介绍

解压同版本kibana

进入安装目录下的config目录,修改kibana.yml文件

修改elasticsearch服务器地址:

# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://localhost:9200"]

运行

1.5 安装ik分词器

1.5.1 什么是分词器

测试

POST _analyze
{
  "analyzer":"chinese",
  "text":"我是中国人"
}

默认的中文分词将每个字段看成一个词,这显然是不符合要求的,所以我们需要安装中文分词器来解决这个问题。

IK分词是一款国人开发的相对简单的中文分词器。

1.5.2 分词器安装

1.先将其解压,将解压后的文件放入一个叫ik的文件夹

2.将ik文件夹拷贝到elastcisearch的plugins目录下

3.重新启动即可以加载ik分词器

1.5.3 分词器测试

IK提供类两个分词器算法ik_smart和ik_max_word

其中ik_smart为最少切分,ik_max_word最细粒度切分

ik_max_word最细粒度切分

POST _analyze
{
   "analyzer":"ik_max_word",
   "text":"我是中国人"
}

ik_smart为最少切分

POST _analyze
{
   "analyzer":"ik_smart",
   "text":"我是中国人"
}

1.什么叫分词?

2.怎样进行中文分词 ik分词器

3.ik分词器有哪些分词 ik_max_word 最细粒度分词 ik_smart 最少切分

如果有一个词没有出现在ik分词器的分词中,怎么办? 在ik分词器中定义自己dic词典,进行自定义分词

1.5.4 自定义分词步骤

新建一个dic结尾的自定义词典,写上需要分词的中文,换行下一个中文,保存为UTF-8

在IKAnalyzer.cfg.xml配置自定义扩展分词

2.Es基本概念和命令

2.1 基本概念

Elasticsearch 是面向文档型数据库,一条数据在这里就是一个文档。 为了方便大家理解,我们将 Elasticsearch 里存储文档数据和关系型数据库 MySQL 存储数据的概念进行一个类比。

Elasticsearch 里的 Index 可以看做一个库,而 Types 相当于表, Documents 则相当于表的行。这里 Types 的概念已经被逐渐弱化, Elasticsearch 6.X 中,一个 index 下已经只能包含一个type, Elasticsearch 7.X 中, Type 的概念已经被删除了。

要注意的是:Elasticsearch本身就是分布式的,因此即使只有一个节点,Elasrticsearc默认页会对你的数据进行分片和副本。

分片(shard): 数据拆分后的各个部分

副本(replica): 每个分片的复制

2.2 索引操作

2.2.1 创建索引(数据库)

PUT 索引库的名字
{
  "settings": {
     "number_of_shards": 分片数量,
      "number_of_replicas": 副本数量
  }
}

PUT blog
{
  "settings": {
     "number_of_shards": 3,
      "number_of_replicas": 2
  }
}

结果:

2.2.2 查询索引

GET blog

{
    "blog": {//索引名
        "aliases": {},//别名
        "mappings": {},//映射
        "settings": {//设置
            "index": {//设置 - 索引
                "creation_date": "1617861426847",//设置 - 索引 - 创建时间
                "number_of_shards": "1",//设置 - 索引 - 主分片数量
                "number_of_replicas": "1",//设置 - 索引 - 副本数量
                "uuid": "J0WlEhh4R7aDrfIc3AkwWQ",//uuid
                "version": {//
                    "created": "7080099"//乐观锁
                },
                "provided_name": "blog"//索引名称
            }
        }
    }
}

2.2.3 删除索引

DELETE blog

2.2.4 查看所有索引

GET _cat/indices

2.3 映射操作

2.3.1 映射的定义

有了索引库,等于有了数据库中的 database。接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mapping)。

什么映射?

映射就是定义文档的过程,文档中包含了哪些字段,这些字段是否保存,是否索引,是否分词等...

只有弄清楚这些配置,es才能更好的帮我们创建索引库

2.3.2 先创建一个索引

PUT article
{
  "settings": {
     "number_of_shards": 3,
      "number_of_replicas": 2
  }
}

2.3.3 动态映射

顾名思义,就是自动创建出来的映射。es 根据存入的文档,自动分析出来文档中字段的类型以及存储方式,这种就是动态映射。

插入文档

POST /article/_doc/1
{
  "name":"特大新闻",
  "title":"班长你吃饭了吗?",
  "images":"http://www.baidu.com"
}

文档添加成功后,就会自动生成 Mappings

{
  "_index" : "article",
  "_type" : "_doc",
  "_id" : "1",
  "_version" : 1,
  "result" : "created",
  "_shards" : {
    "total" : 3,
    "successful" : 1,
    "failed" : 0
  },
  "_seq_no" : 0,
  "_primary_term" : 1
}

类型推断
es 中动态映射类型推断方式如下:

json中的数据

自动推断出来的数据类型

null

没有字段被添加

true/false

boolean

浮点类型

float

数字

long

json对象

object

string

text/keyword/date/double/long

2.3.4 查看映射关系

GET /article/_mapping

{
  "article" : {
    "mappings" : {
      "properties" : {
        "images" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "name" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    }
  }
}

默认情况下,文档中如果新增了字段,mappings 中也会自动新增进来。

2.3.5 显示映射

您对数据的了解比 Elasticsearch 猜测的要多,因此虽然动态映射对入门很有用,但在某些时候您会想要指定自己的显式映射。

PUT /索引名/_mapping
{
    "properties": {
        "字段名":{
        	"type": "text",
        	"index": true,
          "store": true,
          "analyzer":"分词器"
        },
        "字段名":{
        	"type": "keyword",
        	"index": true,
          "store": true,
          "analyzer":"分词器"
        }
    }
}


字段名: 任意写 可以定义多个字段

type: text,keyword,long,short,date,integer,object等

index:是否索引 默认为true

store: 是否存储

analyzer分词器 ik_max_word

2.3.6 创建映射例子

PUT article/_mapping
{
     "properties": {
       "name":{
         "type":"keyword",
         "store": true,
         "index": true
       },
       "title":{
         "type":"text",
         "store": true,
         "index": true, 
         "analyzer": "ik_max_word"
       },
         "images":{
         "type":"keyword",
         "index": false
       }
     }
}

查看映射关系

GET /article/_mapping

{
  "article" : {
    "mappings" : {
      "properties" : {
        "images" : {
          "type" : "keyword",
          "index" : false
        },
        "name" : {
          "type" : "keyword",
          "store" : true
        },
        "title" : {
          "type" : "text",
          "store" : true,
          "analyzer" : "ik_max_word"
        }
      }
    }
  }
}

2.3.7 字段类型

PUT article/_mapping
{
     "properties": {
       "name"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冲向梦想的天空

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

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

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

打赏作者

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

抵扣说明:

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

余额充值