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的更多相关文章

  1. 马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)

    马哥linux运维初级+中级+高级 视频教程 教学视频 全套下载(近50G)目录详情:18_02_ssl协议.openssl及创建私有CA18_03_OpenSSH服务及其相关应用09_01_磁盘及文 ...

  2. 马哥 Linux运维基础进阶和shell入门

    地址:http://edu.51cto.com/course/course_id-618.html 紧接马哥linux专题 第一讲 Bash变量: 1byte= -128,127 2bytes -32 ...

  3. 小白该怎么学《马哥Linux从入门到精通》

    首先,必须说明我已经不是小白啦~现在的我在国内某独角兽担任运维工程师,带着一个四人小团队,在运维方面也算是有些心得,勉强过来回答一下这个问题,就算抛砖引玉了. 所有人都是从小白阶段过来的,我=也经历过 ...

  4. 马哥Linux base学习笔记

     介绍课程: 中级: 初级:系统基础 中级:系统管理.服务安全及服务管理.shell脚本 高级: MySQL数据库: Cache & storgae 集群: Cluster   lb: 4la ...

  5. 马哥Linux SysAdmin学习笔记(三)

    CentOS 5和6的启动流程: Linux:kernel+rootfs kernel:进程管理,内存管理,网络管理,驱动程序,文件系统,安全功能 rootfs: glibc 库:函数集合,funct ...

  6. 马哥Linux SysAdmin学习笔记(二)

    Linux网络属性管理: 局域网:以太网,令牌环网 Ethernet:CSMA/CD 冲突域 广播域 MAC:media access control地址 48bit: 24bits 24bits  ...

  7. 马哥Linux SysAdmin学习笔记(一)

    Linux入门 Linux系统管理: 磁盘管理,文件系统管理 RAID基础原理,LVM2 网络管理:TCP/IP协议,Linux网络属性配置 程序包管理:rpm,yum 进程管理:htop,glanc ...

  8. 【转】Linux从入门到精通——运维工程师成长路线图——CTO马哥Linux视频教学

    加油! http://edu.51cto.com/roadmap/view/id-2.html#6853467-sqq-1-36881-57ccc7d95ea58df839decd91bd220170

  9. Linux运维人员共用root帐户权限审计(转至马哥Linux运维)

    一.应用场景 在中小型企业,公司不同运维人员基本都是以root 账户进行服务器的登陆管理,缺少了账户权限审计制度.不出问题还好, 出了问题,就很难找出源头.这里介绍下,如何利用编译bash 使不同的客 ...

  10. 马永亮(马哥) linux视频2018年版

    视频试看地址: 百度云链接: https://pan.baidu.com/s/1q4DV62DiFbBT8t63CapLJA  提取码: h5e4 资料收集于网络,如有侵权,告知后删除

随机推荐

  1. Nginx错误日志(error_log)配置及信息详解

    Nginx错误日志信息介绍 Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(ngx_core_module)的参数,该参数的名字为error_log,可以放在Main区块中全局配 ...

  2. 关于一次配合开发工作而产生的服务器内核参数问题(Android 网络问题)

    关于一次配合开发工作而产生的服务器内核参数问题(Android 网络问题) 问题转载(本人与作者遇到了同样的问题) 问题描述 问题描述:在这几年的Android开发中,遇到了一个困扰我好久的问题,有时 ...

  3. 面试官:Java中线程是按什么顺序执行的?

    摘要:Java中多线程并发的执行顺序历来是面试中的重点,掌握Java中线程的执行顺序不仅能够在面试中让你脱颖而出,更能够让你在平时的工作中,迅速定位由于多线程并发问题导致的"诡异" ...

  4. (Set, Map, Collections工具类)JAVA集合框架二

    Java集合框架部分细节总结二 Set 实现类:HashSet,TreeSet HashSet 基于HashCode计算元素存放位置,当计算得出哈希码相同时,会调用equals判断是否相同,相同则拒绝 ...

  5. ATMS中去拉起新的进程,并在新进程启动后调用attachApplication时,resume待启动的Activity

    相关文章: ATMS中去pause Activity A. 目录 ATMS拉起新进程 堆栈 resumeTopActivityInnerLocked:1684, ActivityStack start ...

  6. SOAP与REST API的区别

    之前一直想写些RESTful相关的文章,却一直未付诸行动.直到最近接手一个新的项目,对这块重新温习,乘此机会写些相关帖子.欢迎大家评论留言,如有错漏之处,也望各位大佬不令赐教. 话不多说,干活顶上. ...

  7. Where is the Marble UVA - 10474

     Raju and Meena love to play with Marbles. They have got a lot of marbles with numbers written on th ...

  8. Day14_84_通过反射机制修改和获取class里的属性值

    通过反射机制修改和获取class里的属性值 * 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象) * 属性对象.get(Object); 获取Object对象中 ...

  9. 微信小程序底部实现自定义动态Tabbar

    多图警告!!! 最近在工作中遇到这样一个需求:微信小程序底部的Tab需要通过判断登录人的角色动态进行改变,想要实现这个功能依靠小程序原生的Tabbar是不可能实现的了,所以研究了一下自定义Tab,这里 ...

  10. 源码篇:ThreadLocal的奇思妙想(万字图文)

    前言 ThreadLocal的文章在网上也有不少,但是看了一些后,理解起来总感觉有绕,而且看了ThreadLocal的源码,无论是线程隔离.类环形数组.弱引用结构等等,实在是太有意思了!我必须也要让大 ...