马哥Linux--elasticsearch
ELK stack:
Lucene:
文档:document
包含了一个或多个域的容器
field:value
域:
有很多选项
索引选项,存储选项,域向量使用选项
索引选项用于通过倒排索引来控制文本是否可被搜索:
Index:ANALYZED 分析(切词)并单独作为索引项
Index.Not_ANALYZED 不分析(不切词),把整个内容当做一个索引项
Index.ANYLYZED_NORMS:类似于index:ANALYZED,但不存储token的Norms(加权基准)信息
Index.Not_ANALYZED_NORMS:类似于Index:Not_ANALYZED,但不存储值的Norms(加权基准)信息
Index.NO:不对此域的值进行索引,因此不能被搜索
存储选项:是否需要存储域的真实值
title: This is a Notebook.
store.YES:存储真实值
store.NO:不存储真实值
域向量选项用于在搜索期间该文档所有的唯一项都能完全从文档中检索时使用
文档和域的加权操作
加权计算标准:
搜索:
查询Lucene索引时,它返回的是一个有序的scoreDOC对象:查询时,Lucene会为每个文档计算出其score
API:
IndexSearcher:搜索索引入口
Query及其子类:
QueryParser
TopDocs
ScoreDoc
Lucene的多样化查询:
IndexSearcher中的search方法:
TermQuery: 对索引中的特定项进行搜索,Term是索引中的最小索引片段,每个term包含了一个域名和一个文本值
title:this is a desk
owner: Tom Blair
description: this is a desk, it's belong to Tom.
title: this is a table
owner: Clinton
description: this is a desk, it's belong to Clinton.
This:(1)(2)
Desk:(1)
table:(2)
TermRangeQuery: 在索引中的多个特定项中进行搜索,能搜索指定多个域
NumbericRangeQuery:做数值范围搜索
PrefixQuery:用于搜索以指定字符串开头的项
BooleanQuery:用于实现组合查询:组合逻辑有三种:AND OR NOT
PhraseQuery:距离
WildcardQuery:通配符
FuzzyQuery:模糊查询:levenshtein
ElasticSearch:
ES是一个基于Lucene实现的开源,分布式,RestFul的全文本搜索引擎.此外,它还是一个分布式实时文档存储,其中每个文档的每个field均是被索引的数据,且可被搜索.也是一个带实时分析功能的分布式搜索引擎,能够扩展至数以百计的节点实时处理PB级别的数据
基本组件:
索引(index):文档容器,换句话说,索引是具有类似属性的文档的集合.类似于表.索引名必须使用小写字母
类型(type):类型是索引内部的逻辑分区,其意义完全取决于用户需求.一个索引内部可定义一个或多个类型.一般来说,类型就是拥有相同的域的文档的预定义.
文档(document):文档是Lucene索引和搜索的原子单位,它包括了一个或多个域,是域的容器.基于json格式表示
每个域的组成部分:一个名字,一个或多个值.拥有多个值的域,通常称为多值域
映射(mapping):原始内容存储为文档之前需要事先进行分析.例如切词,过滤掉某些词等.映射用于定义此分析机制该如何实现.除此之外,ES还为映射提供了诸如将域中的内容排序等功能
ES的集群组件:
Cluster:ES的集群标识为集群名称.默认为elasticsearch.节点就是靠此名字来决定加入到哪个集群中.一个节点只能属性于一个集群.
Node:运行了单个ES实例的主机即为节点.用于存储数据,参与集群索引及搜索操作.节点的标识靠节点名.
Shard:将索引切割成为的物理存储组件.但每一个shard都是一个独立且完整的索引.创建索引时,ES默认将其分割为5个shard,用户也可以按需自定义.创建完成后不可修改.
shard有两种类型:primary shard和replica.Replica用于数据冗余及查询时的负载均衡.每个主shard的副本数量可自定义,且可动态修改.
ES Cluster工作过程:
启动时,通过多播(默认)或单播方式在9300/tcp查找同一集群中的其他节点,并与之建立通信.
集群中的所有节点会选举出一个主节点负责管理整个集群状态,以及在集群范围内决定各shards的分布方式.站在用户角度而言,每个节点均可接收并响应用户的各类请求.
集群有状态:green,red,yellow
JDK:
Oracle JDK
OpenJDK
ES的默认端口:
参与集群的事务:9300/tcp
transport.tcp.port
接收请求:9200/tcp
http.port
RestFul API:
四类API:
1.检查集群,节点,索引等监控与否,以及获取其相应状态
2.管理集群,节点,索引及原数据
3.执行CRUD操作
4.执行高级操作,例如paging,filtering等
ES访问接口:9200/tcp
curl -X <VERB> '<PROTOCOL>://HOST:PORT/<PATH>?<QUERY_STRING>' -d '<BODY>'
VERB:GET PUT DELETE等
PROTOCOL: http https
QUERY_STRING:查询参数,例如?pretty表示用易读的JSON格式输出
BODY:请求的主体
回顾:搜索引擎和ES
搜索引擎:
索引组件,搜索组件
索引:倒排索引
索引组件:Lucene
搜索组件:ES
数据获取组件:solr,Nutch,Grub,Apeture
ES:
索引(index),类型(type),文件(document),映射(mapping)
集群(cluster),节点(node),shard(primary,replica)
9300/tcp
每个索引的分片数量: 5
每个分片也应该会有副本: 1
jvm: oracle jdk,openjdk
用户访问接口:9200/tcp
restful:
API
curl -X<VERB> 'PROTOCOL://HOST:PORT/<PATH>?QUERY_STRING' -D '<BODY>'
_cat API:
ELK stack(2)
Cluster APIs:
health:
curl -XGET 'http://172.16.100.67:9200/_cluster/health?pretty'
state:
curl -XGET 'http://172.16.100.67:9200/_cluster/state/<metrics>?pretty'
stats:
curl -XGET 'http://172.16.100.67:9200/_cluster/stats'
节点状态:
curl -XGET 'http://172.16.100.67:9200/_nodes/stats'
Plugins:
插件扩展ES的功能:
添加自定义的映射类型,自定义分析器,本地脚本,自定义发现方式
安装:
直接将插件放置于plugins目录中即可
使用plugin脚本进行安装
/usr/share/elasticsearch/bin/plugin -h
-l
-i,--install
站点插件:
http://host:9200/_plugin/plugin_name
CRUD操作相关的API:
创建文档
PUT http://10.26.32.52:9200/students/class1/1?pretty
{
"first_name":"rong",
"last_name":"huang",
"gender":"female",
"age":23,
"courses":"luo ying shen jian"
}
获取文档
GET http://10.26.32.52:9200/students/class1/1?pretty
{
"_index": "students",
"_type": "class1",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"first_name": "jing",
"last_name": "guo",
"gender": "male",
"age": 25,
"courses": "xiang long shi ba zhang"
}
}
更新文档:
PUT方法会覆盖原有文档
如果只更新部分内容,得使用_update API
POST http://10.26.32.52:9200/students/class1/2/_update?pretty
{
"doc":{"age":22}
}
删除文档:
DELETE http://10.26.32.52:9200/students/class1/2?pretty
删除索引:
DELETE http://10.26.32.52:9200/students
查询数据:
Query API
Query DSL: JSON based language for building complex queries
用于实现诸多类型的查询操作.比如,simple term query,phrase,range boolean,fuzzy等
ES的查询操作执行分为两个阶段:
分散阶段:
合并阶段:
查询方式:
向ES发起查询请求的方式有2种:
1.通过restful request API查询,也称为query string
2.通过发送REST request body进行
GET http://10.26.32.52:9200/cmdb_assetsinfo/_search?pretty
GET http://10.26.32.52:9200/cmdb_assetsinfo/_search?pretty
{
"query":{"match_all":{}}
}
多索引,多类型查询:
/_search:所有索引
/INDEX_NAME/_search:单索引
/INDEX1,INDEX2/_search:多索引
/s*,t*/_search:
/students/class1/_search:单类型搜索
/students/class1,class2/_search:多类型搜索
Mapping和Analysis:
ES:对每一个文档,会取得其所有域的所有值,生成一个名为"_all"的域.执行查询时,如果在query_string未指定查询的域,则在_all域上执行查询操作
GET /_search?q='xianglong'
GET /_search?q='xianglong shiba zhang'
GET /_search?q=courses:'xianglong shiba zhang'
GET /_search?q=courses:'xianglong'
前两个:表示在_all域搜索
后两个:在指定域搜索
数据类型:string,numbers,Boolean,dates
查看指定类型的mapping示例:
GET http://10.26.32.52:9200/cmdb_assetsinfo/_mapping/
ES中搜索的数据广义上可被理解为两类:
types:exact
full-text
精确值:指未经加工的原始值:在搜索时进行精确匹配
Notebook,notebook
full-text:用于引用文本中数据,判断文档在多大程度上匹配查询请求.即文档与用户请求查询的相关度
为了完成full-text搜索,ES必须首先分析文本,并创建出倒排索引.倒排索引中的数据还需进行"正规化"为标准格式
分词
正规化
即分析
分析需要由分析器进行,analyzer
分析器由三个组件构成:字符过滤器,分词器,分词过滤器
ES内置的分析器:
standard analyzer
simple analyzer
whitespace analyzer
language analyzer
分析器不仅在创建索引时用到,在构建查询时也会用到
Query DSL:
request body:
分成两类:
query dsl:执行full-text查询时,基于相关度来评判其匹配结果
查询执行过程复杂,且不会被缓存
filter dsl:执行exact查询时,基于其结果为yes或no进行评判
速度快,结果可缓存
查询语句的结构:
{
QUERY_NAME:{
ARGUMENT:VALUE,
ARGUMENT:VALUE,
...
}
}
{
QUERY_NAME:{
FIELD_NAME:{
ARGUMENT:VALUE,
...
}
}
}
filter dsl:
term filter:精确匹配包含指定term的文档
{"term":{"name":"Guo"}}
curl -XGET 'localhost:9200/students/_search?pretty' -d {
"query":{
"term":{
"name":"guo"
}
}
}
terms filter:用于实现多值精确匹配
{"terms":{"name":["guo","rong"]}}
range filters:用于在指定范围内查找数值或时间
{"range":
"age":{
"gte":15,
"lte":25
}
}
exists and missing filters:
{"exists":
{
"age":25
}
}
boolean filter:
基于boolean的逻辑来合并多个filter子句
must:其内部所有的子句条件必须同时匹配,即and
must:{
"term":{"age:25}
"term":{"gender":"Female"}
}
must not:其所有子句必须不匹配,即not
must_not:{
"term":{"age":25}
}
should:至少有一个子句匹配,即or
should:{
"term":{"age:25}
"term":{"gender":"Female"}
}
query dsl:
match_all query:
用于匹配所有文档,没有指定任何query,默认即为match_all query.
{"match_all":{}}
match query:
在几乎任何域上执行full-text或exact-value查询
如果执行full-text查询,首先对查询的语句做分析
{"match":{"students":"guo"}}
如果执行exact-value查询:搜索精确值,此时,建议使用过滤,而非查询
{"match":{"name":"guo"}}
multi_match query:
用于在多个域上执行相同的查询:
{
"multi_match":
"query":full-text search
"field":{"value1","value2"}
}
{
"multi_match":
"query":{
"students":"guo"
}
"field":
{
"name"
"description"
}
}
bool query:
基于Boolean逻辑合并多个查询语句,与bool filter不同的是,查询子句不是返回yes或no,而是其计算出的匹配分值.因此,boolean query 会为各子句合并其score
must
must_not
should
合并filter和query:
{
"filterd":{
query:{
"match":{
"gender":"female"
}
}
filter:{
"term":{
"age":25
}
}
}
}
查询语句语法检查:
GET /INDEX/_validate/query?pretty
{
...
}
GET /INDEX/_validate/query?explain&pretty
{
...
}
马哥Linux--elasticsearch的更多相关文章
- 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)
马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...
- 马哥 Linux运维基础进阶和shell入门
地址:http://edu.51cto.com/course/course_id-618.html 紧接马哥linux专题 第一讲 Bash变量: 1byte= -128,127 2bytes -32 ...
- 小白该怎么学《马哥Linux从入门到精通》
首先,必须说明我已经不是小白啦~现在的我在国内某独角兽担任运维工程师,带着一个四人小团队,在运维方面也算是有些心得,勉强过来回答一下这个问题,就算抛砖引玉了. 所有人都是从小白阶段过来的,我=也经历过 ...
- 马哥Linux base学习笔记
介绍课程: 中级: 初级:系统基础 中级:系统管理.服务安全及服务管理.shell脚本 高级: MySQL数据库: Cache & storgae 集群: Cluster lb: 4la ...
- 马哥Linux SysAdmin学习笔记(三)
CentOS 5和6的启动流程: Linux:kernel+rootfs kernel:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能 rootfs: glibc 库:函数集合,funct ...
- 马哥Linux SysAdmin学习笔记(二)
Linux网络属性管理: 局域网:以太网,令牌环网 Ethernet:CSMA/CD 冲突域 广播域 MAC:media access control地址 48bit: 24bits 24bits ...
- 马哥Linux SysAdmin学习笔记(一)
Linux入门 Linux系统管理: 磁盘管理,文件系统管理 RAID基础原理,LVM2 网络管理:TCP/IP协议,Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...
- 【转】Linux从入门到精通——运维工程师成长路线图——CTO马哥Linux视频教学
加油! http://edu.51cto.com/roadmap/view/id-2.html#6853467-sqq-1-36881-57ccc7d95ea58df839decd91bd220170
- Linux运维人员共用root帐户权限审计(转至马哥Linux运维)
一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还好, 出了问题,就很难找出源头.这里介绍下,如何利用编译bash 使不同的客 ...
- 马永亮(马哥) linux视频2018年版
视频试看地址: 百度云链接: https://pan.baidu.com/s/1q4DV62DiFbBT8t63CapLJA 提取码: h5e4 资料收集于网络,如有侵权,告知后删除
随机推荐
- Kubernetes 常见问题总结
Kubernetes 常见问题总结 如何删除不一致状态下的 rc,deployment,service 在某些情况下,经常发现 kubectl 进程挂起现象,然后在 get 时候发现删了一半,而另外的 ...
- 小白都能学会的Java注解与反射机制
前言 Java注解和反射是很基础的Java知识了,为何还要讲它呢?因为我在面试应聘者的过程中,发现不少面试者很少使用过注解和反射,甚至有人只能说出@Override这一个注解.我建议大家还是尽量能在开 ...
- [hash]集合
集合 题目描述 给定两个集合A.B,集合内的任一元素x满足1 ≤ x ≤ 109,并且每个集合的元素个数不大于105.我们希望求出A.B之间的关系. 任 务 :给定两个集合的描述,判断它们满足下列关系 ...
- Echarts4.x雷达图如何展示一维数据?
最近做的项目其中一个功能是画雷达图,鼠标滑过雷达图的拐点,展示该维相关数据,并且需要显示雷达图的刻度. 但是我发现单纯的雷达图似乎没办法展示一维数据. 我总结了一下,关于画雷达图,我遇到的难点有三个: ...
- JS基础学习第二天
类型转换 类型转换就是指将其他的数据类型,转换为String Number 或 Boolean 转换为String 方式一(强制类型转换): 调用被转换数据的toString()方法例子:var a ...
- 一文搞定zuul使用
前言 在深入探讨Spring Cloud Gateway的细节之前,让我们了解有关反向代理和api网关模式的一些基础知识. 什么是反向代理? 反向代理是代表其他事物进行请求的事物.它的行为更像是简单的 ...
- 2020-BUAA OO-面向对象设计与构造-HW11中对ageVar采用缓存优化的等价性证明(包括溢出情况)
HW11中对ageVar采用缓存优化的等价性证明(包括溢出情况) 概要 我们知道,第三次作业里age上限变为2000,而如果缓存年龄的平方和,2000*2000*800 > 2147483647 ...
- leetcode 刷题(数组篇)152题 乘积最大子数组 (动态规划)
题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积. 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子 ...
- C# Linq 延迟查询的执行
在定义linq查询表达式时,查询是不会执行,查询会在迭代数据项时运行.它使用yield return 语句返回谓词为true的元素. var names = new List<string> ...
- RTSP 流相关工具介绍
RTSP (Real Time Streaming Protocol),实时流协议,是一种应用层协议,专为流媒体使用.本文将介绍 GStreamer, VLC, FFmpeg 这几个工具,如何发送.接 ...