IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 关于ElasticSearch(es) 的基本使用教程总结(全) -> 正文阅读

[大数据]关于ElasticSearch(es) 的基本使用教程总结(全)

关于各个组件安装教程可以参考docker安装elasticsearch(最详细版)_bright的博客-CSDN博客_docker安装elasticsearch

一开始可能不是很详细,内容会不断更新,欢迎大家指正,我只记关键的如果有想从头第一次学的建议先看视频

目录

ElasticSearch介绍

ElasticSearch 与 Solr 的区别

ElasticSearch 核心概念

倒排索引

IK 分词器

字段类型概述

text

keyword

关于索引的基本操作

创建索引:PUT /索引名/类型名/文档id{请求体}

删除索引 delete?只能删除文档或索引,不能删除类型

关于文档的基本操作


ElasticSearch介绍

Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。?通过简单的 RESTful API 来隐藏 Lucene 的复杂性,从而让全文搜索变得简单。本身扩展性好,可以扩展到上百台服务器,处理 PB 级别的数据。

ElasticSearch 与 Solr 的区别

1、ElasticSearch 开箱即用,Solr 需要安装。
2、Solr 利用 Zookeeper 进行分布式管理,而 ElasticSearch 自身带有分布式协调管理功能。
3、Solr 支持更多格式的数据,例如 JSON、XML、CSV,而 ElasticSearch 仅支持 JSON 文件格式。
4、Solr 官方提供的功能更多,而 ElasticSearch 本身更注重于核心功能,高级功能多由第三方插件提供,例如图形化界面需要 kibana 友好支撑。
5、Solr 查询快,但更新索引时慢,用于电商等查询多的应用。ElasticSearch 建立索引快即实时性查询快,用于 facebook、新浪等搜索应用。
6、Solr 是传统搜索应用的有力解决方案,ElasticSearch 更适用于新兴的实时搜索应用。

ElasticSearch 核心概念

ElasticSearch 是面向文档的索引,ElasticSearch 与关系型数据库的对比:

ElasticSearch 本身就是集群,可以通过可视化界面右上角你的信息查看。ElasticSearch 的默认集群名就是 elasticsearch。ElasticSearch 在后台把每个索引划分成多个分片,每分分片可以在集群中的不同服务器间迁移。

文档:一条条数据和记录,是索引和搜索数据的最小单位,是键值对,是 Json 对象。
类型:字段类型映射,逐渐过时,因为 ElasticSearch 会自动猜测类型。
索引:映射类型的容器,文档集合,类似于数据库,会被存储到各个分片上。
分片:一个索引默认有5个分片,主分片和对应的复制分片都不会在同一个节点内,这样有利于某个节点挂掉了,数据也不至于丢失。实际上,一个分片是一个 Lucene 索引,一个包含倒排索引的文件目录。倒排索引的结构使得 ElasticSearch 在不扫描全部文档的情况下,就能告知哪些文档中包含特定的关键字。

倒排索引

ElasticSearch 使用的是一种称为倒排索引的结构,采用 Lucene 倒排索引作为底层。这种结构适用于快速的全文搜索,一个索引由文档中所有不重复的列表构成,对于每一个词,都有一个包含它的文档列表。文档保存到索引库的时候,将每个文档拆分成独立的词(或称为词条或 tokens ),创建包含所有不重复的词条的排序列表,列出每个词条出现在哪个文档,两个文档都匹配,但是第一个文档比第二个匹配程度更高。如果没有别的条件,这两个包含关键字的文档都将返回。

IK 分词器

IK 提供了两个分词算法:ik_smart 和 ik_max_word。其中 ik_smart 为最少切分,ik_max_word 为最细粒度划分。

?<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
? ? <comment>IK Analyzer 扩展配置</comment>
? ? <!--用户可以在这里配置自己的扩展字典 -->
? ? <entry key的扩展停止词字典-->
? ? <entry key="ext_stopwords"></entry>
? ? <!--用户可以在这里配置远程扩展字典 -->
? ? <!-- <entry key="remote_ext_dict">words_location</entry> -->
? ? <!--用户可以在这里配置远程扩展停止词字典-->
? ? <!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>

?记得重启es

字段类型概述

字符串类型:text、keyword
数值类型:long、integer、short、byte、double、float、half float、scaled、float
日期类型:date
布尔值类型:boolean
二进制类型:binary

? 字符串类型ElasticSearch对字符串拥有两种完全不同的搜索方式. 你可以按照整个文本进行匹配, 即关键词搜索(keyword search), 也可以按单个字符匹配, 即全文搜索(full-text search).前者的字符串被称为not-analyzed字符, 而后者被称作analyzed字符串。text用于全文搜索的, 而keyword用于关键词搜索.

?

text

当一个字段是要被全文搜索的,比如Email内容、产品描述,应该使用text类型。设置text类型以后,字段内容会被分析,在生成倒排索引以前,字符串会被分析器分成一个一个词项。text类型的字段不用于排序,很少用于聚合。

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text"
          }
        }
      }
    }
  }
}

如果不指定类型,ElasticSearch字符串将默认被同时映射成text和keyword类型,会自动创建下面的动态映射(dynamic mappings):

{
    "foo": {
        "type": "text",
        "fields": {
            "keyword": {
                "type": "keyword",
                "ignore_above": 256
            }
        }
    }
 
}

ignore_above忽略长度超过256字符串。

这就是造成部分字段还会自动生成一个与之对应的“.keyword”字段的原因。

一个字符串字段可以映射为text字段用于全文本搜索,也可以映射为keyword字段用于排序或聚合,这时候需要用到fields设置多字段。如果业务关系中,需要该字段支持两种类型的查询,可以设置为如下形式:

PUT my_index
{
  "mappings": {
    "_doc": {
      "properties": {
        "name": {
          "type": "text",
          "fields": {
            "raw": { 
              "type":  "keyword"
            }
          }
        }
      }
    }
  }
}

name.raw字段是name字段的keyword版本。

keyword

keyword类型适用于索引结构化的字段,比如email地址、主机名、状态码和标签。如果字段需要进行过滤(比如查找已发布博客中status属性为published的文章)、排序、聚合。keyword类型的字段只能通过精确值搜索到。

{
    "foo": {
        "type": "text",
        "fields": {
            "keyword": {
                "type": "keyword",
                "ignore_above": 256
            }
        }
    }
}

在ES里为已有索引增加一个新字段以后,老的数据并不会自动就拥有了这个新字段,也就不可能给他一个所谓的默认值。ES里的数据都是文档型的,修改一个文档只能是对原文档做更新,也就是只能借助于重新索引的手段。
?
NULL在ES里的含义和RDBMS非常不同。?
?
NULL的意思是索引的时候,某个字段没有被赋值,例如文档有"city","title"和"status_code"三个字段。
?
索引的时候漏掉status_code字段:

?

?处理 Null 值 | Elasticsearch: 权威指南 | Elastic最好的笔记是官方文档,其他类型的字段就先不介绍了

关于索引的基本操作

创建索引:PUT /索引名/类型名/文档id{请求体}

mappings类似与数据库建表时候指定字段,es中如果不指定es会默认猜帮你创建类型,类型名可以省略(表名)默认_doc 在以后版本可能会被废弃?

获取索引信息:GET 索引名

查看 ElasticSearch 集群的健康值:GET _cat/health

更新索引

方法一:重新 PUT,版本号增加,状态变为 updated

?方法2:使用 POST,只更新其中一个字段,可以防止更新时数据遗漏

删除索引 delete?只能删除文档或索引,不能删除类型

批量增删改查BULK,必须是POST请求

?

\[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FOgQa0ph-1624030979196)(ElasticSeatch.assets/image-20210618182316175.png)\]

?

关于文档的基本操作

?上边这是查询方式之一?还有一种dsl操作

?

?hits里面包含了索引的文档的id的信息,里面_source包含了数据,_sorce是指分数,即匹配度,越高的越前

排序

?

分页

from size 有点像limit start pagesize

boolen值查询

上边换成should相当于mysql中的or?

范围查询

?

?匹配多个值

精确查找是term 是使用倒排索引精确查找

?

?

?后续在另外一张介绍整合springES

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-01 14:34:51  更:2021-08-01 14:36:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 9:18:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码