zoukankan      html  css  js  c++  java
  • ElasticSearch_基础

    ElasticSearch基础

    1.基础

    • 开箱即用, 解压即可
    • 在bin目录下启动ElasticSearch
    • 访问localhost:9200 可以看到下面的内容
    • image-20201029143304387

    2. 安装与使用可视化插件

    • head插件, 依赖于Node.Js

    • 安装ElasticSearch-head, 在解压的目录下运行 cmd ,输入 cnpm install 等待安装完毕

    • 安装完毕后, 使用命令 npm run start 启动

    • 由于我们的插件的端口为 9100, 与ElasticSearch不同, 产生了跨域的问题, 要在ElasticSearch的配置文件中配置跨域

    • 配置跨域

      • 在ElasticSearch文件夹下的/conf/elasticsearch.yaml中配置

      • http.cors.enabled: true
        http.cors.allow-origin: "*"
        
      • 重启ElasticSearch

    • 正常启动如下

    • image-20201029153917033

    3. 安装Kibana

    • Kibana 版本要和 ES 一致

    • 解压完毕, 启动测试

    • 在 /bin 目录下的kibana.bat文件

    • 默认端口为localhost:5601

    • 访问kibana

    • image-20201029160653069

    • 国际化(汉化)

      • 在kibana目录下的 x-packplugins ranslations ranslations 可以看到

      • image-20201029161128980

      • 我们在 /conf 目录下的的kibana.yml中配置

      • i18n.locale: "zh-CN"
        
      • 重启kibana即可!

    4. ES的核心概念

    • ES是面向文档的, 一切都是 JSON (文档就是我们的数据)

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

      • 单个节点由于物理机硬件限制,存储的文档是有限的,如果一个索引包含海量文档,则不能在单个节点存储。ES提供分片机制,同一个索引可以存储在不同分片(数据容器)中,这些分片又可以存储在集群中不同节点上
    • 一个人就是一个集群, 默认的集群名称就是 ElasticSearch

    • ElasticSearch是面向文档的, 索引和搜索数据的最小单位是文档, 文档有几个重要属性

      • 自我包含: 一篇文档同时包含字段和对应的值, 即同时包含 key : value
      • 可以使层次型的: 一个文档中包含文档, 可以用来构建复杂的逻辑实体! ==> (就是一个 JSON 对象! 使用FastJSON或者Jason进行自动转换)
      • 灵活的结构: 文档不依赖预先定义的模式. 与关系型数据库的提前定义字段才能使用不同, 在ElasticSearch中, 对于字段是非常灵活的, 有时候我们可以忽略该字段, 或者动态的添加一个新的字段
    • 索引就是数据库

      • 索引是映射类型的容器, ES中的索引是一个非常大的文档集合, 索引存储了映射类型的字段和其他设置
      • 倒排索引
        • 采用Lucene倒排索引作为底层
        • 这种结构适用于快速的全文搜索
        • 一个索引由文档中所有不重复的列表构成, 对于每一个词, 都有一个包含他的文档列表
        • 搜索时, 完全过滤掉无关的所有数据, 提高效率
    • 重要步骤

      • 创建索引 (相当于我们的数据库)
      • 字段类型 (mapping 映射)
      • 文档 (具体的数据)
      • 底层的搜索使用的是倒排索引, 采用分片的机制, 可以使一个索引包含海量的数据

    5. IK分词器插件

    • IK分词器对中文具有良好支持的分词器

    • IK分词器包括 ik_max_word 和 ik_smart

      • ik_max_word会将文本做最细粒度的拆分
      • ik_smart 会做最粗粒度的拆分(最少切分)
    • 安装

      • 在Github上下载, 与ES版本要对应
      • 解压后放到 ElasticSearch/plugins 目录即可
      • 由于添加了新插件, 重启 ES 即可!
      • 可以看到, IK分词器被加载了
      • image-20201029170132815
    • 在Kibana中测试不同的分词器效果

      • 最少切分

        • image-20201029170804999
      • 最细粒度切分, 穷尽所有可能

        • image-20201029170901247
    • IK分词器的字典没有一些自定义的词, 需要我们自己加到我们的分词器的字典中

      • 比如, 我们测试 山人西来 这个词

      • image-20201029171615100

      • 在ik分词器的conf中找到 IKAnalyzer.ofg.xml配置

      • 在conf中, 我们写一个自己的字典, 叫 mydic.dic, 编辑, 写入山人西来

      • 在配置文件添加自己的字典

      • <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
        <properties>
        	<comment>IK Analyzer 扩展配置</comment>
        	<!--用户可以在这里配置自己的扩展字典 -->
        	<entry key="ext_dict">mydic.dic</entry>
        	 <!--用户可以在这里配置自己的扩展停止词字典-->
        	<entry key="ext_stopwords"></entry>
        	<!--用户可以在这里配置远程扩展字典 -->
        	<!-- <entry key="remote_ext_dict">words_location</entry> -->
        	<!--用户可以在这里配置远程扩展停止词字典-->
        	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
        </properties>
        
    • 重启ES, 可以看到加载了我们的自定义字典

    • image-20201029171920256

    • 可以看到, 我们自定义的 山人西来 已经被认为是一个词了

      • image-20201029172110351
    • 以后, 我们需要自己配置需要的分词, 在我们自定义的dic文件中进行配置即可!

    6. Rest 风格说明

    • RestFul风格是一种软件架构风格, 而不是标准an,只是提供了一组设计原则和约束条件

    • method url地址 描述
      PUT localhost:9200/索引名称/类型名称/文档 id 创建文档(指定文档 id)
      POST localhost:9200/索引名称/类型名称 创建文档(随机文档 id)
      POST localhost:9200/索引名称/类型名称/文档 id/_update 修改文档
      DELETE localhost:9200/索引名称/类型名称/文档 id 删除文档
      GET localhost:9200/索引名称/类型名称/文档 id 通过文档 id 查询文档
      POST localhost:9200/索引名称/类型名称/_search 查询所有的数据

    7. 关于索引的基本操作

    • 创建一个索引

      • PUT /索引名/~类型名~/文档 id
        {
        	请求体(JSON)
        }
        
      • image-20201030094350469

      • image-20201030094413079

      • 完成了自动增加了索引! 数据也成功的添加了!

      • image-20201030094528115

    • 指定自己的数据类型 (这里是配置好数据的类型)

      • image-20201030094956421

      • PUT /索引名
        {
        	"mappings": {
        		"properties": {
        			字段: {
        				"type": 指定数据类型
        			}
        		}
        	}
        }
        
    • 可以通过GET请求得到具体的信息

      • image-20201030095432889
    • 查看默认的信息

      • 注意, 在 ES 8 之后, type会被启用, 这里默认为_doc, 可以显式的声明, 也可以不写!

      • image-20201030095804143

      • 查看默认信息

      • image-20201030095842943

      • 如果自己的文档的字段没有指定, 那么ES就会给我们默认的配置字段类型

      • 通过 GET _cat/ 可以查看当前的ES的很多信息

      • image-20201030100258269

    • 修改索引

      • 提交还是使用PUT即可, 然后覆盖 (方法1)

      • 缺点: 如果漏写了字段, 那么该字段会变成空!

      • image-20201030100659349

      • 使用POST _update, 要指定一个字段"doc" (推荐)

      • image-20201030101028474

    8. 关于文档的基本操作

    1. 基本操作

    • 简单的搜索
      • 简单的条件查询 ==> 可以根据默认的映射规则产生查询结果
      • image-20201030104658034

    2. 进阶操作

    • 复杂的搜索 (select ==> 排序, 分页, 高亮, 模糊查询, 精准查询)

    1. 构建查询

    • 查询结果的 _score : 匹配度, 如果存在多条查询出来的结果, 匹配度越高则分值越高

    • image-20201030105202041

    • image-20201030105614031

    • hit

    • image-20201030110219730

    • 结果的过滤(只显示部分的字段)

    • image-20201030110333005

    • 使用JAVA操作ES, 所有的方法和对象就是这里面的 key!

    2. 排序

    image-20201030110659782

    • desc 降序, asc 升序

    3. 分页

    单页面要显示的数据

    image-20201030110921177

    数据索引下标还是从 0 开始的, 和学的所有的数据结构是一样的!

    4. 布尔值查询

    image-20201030111314096

    可以通过布尔值进行多条件精确查询

    • must命令 ==> 所有的条件都要符合 (and)

    • should命令 ==> 只要有一条满足即可 (or)

    • must_not命令 ==> 不符合条件才可以 (not)

    5. 过滤 (区间)

    image-20201030111846037

    • gte ==> 大于等于 (gt 大于)

    • lte ==> 小于等于(lt 小于)

    • eq ==> 等于

    6. 匹配多个条件

    多个条件之间使用空格隔开即可, 只要满足其中一个结果就可以被查出, 这时候可以通过分值进行基本的判断

    image-20201030112702605

    7. 精确查询

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

    • 关于分词

      • term: 直接查询精确的
      • match: 会使用分词器解析! (先分析文档, 然后再通过分析的文档进行查询)
    • 两个类型

      • text: 会被分词器解析
      • keyword: 不会被分词器解析
    • 精确查询多个值: 利用布尔

    8. 高亮查询

    image-20201030133449418

  • 相关阅读:
    flume
    Hive的安装
    集群的高级设定
    HDFS命令
    2019-9-25:渗透测试,基础学习,初识Hydra,BP爆破密码
    2019-9-17:渗透测试,基础学习,apache初识,mysql初识等笔记
    2019-9-24:渗透测试,css样式,js基础学习笔记
    2019-9-24:渗透测试,JavaScript数据类型基础学习
    2019-9-23:渗透测试,基础学习,http协议数据包的认识,html css的认识,笔记
    转。http,状态码详解
  • 原文地址:https://www.cnblogs.com/wang-sky/p/13901668.html
Copyright © 2011-2022 走看看