Elasticsearch-入门.md

1、基本概念

1.1 文档

Elasticsearch 是面向文档的,文档会被序列化成 JSON 格式,保存在 Elasticseach 中。
文档的元数据,用于标注文档的相关信息。如_index,_type,_id,_source,_version,_score。

#查看索引的文档总数
GET kibana_sample_data_ecommerce/_count

#查看具体的字段
GET /_cat/indices/kibana*?pri&v&h=health,index,pri,rep,docs.count,mt

#How much memory is used per index
GET /_cat/indices?v&h=i,tm&s=tm:desc
1.2 索引

Index 是文档的容器。Index 提现逻辑空间概念;Shard 体现物理空间概念,索引中的数据分散在 Shard 中。

索引中的 Mapping 定义文档字段的类型。
索引中的 Setting 定义不同的数据分布。

#查看indices
GET /_cat/indices/kibana*?v&s=index
1.3 节点

节点是一个Elasticsearch 实例
每个节点启动后,默认是一个 Master eligible 节点
Master-eligible 节点可以参加选主流程,成为 Master 节点
每个节点都保存了集群的状态,只有 Master 节点才能修改集群的状态信息

  • Data Node
    可以保存数据的节点。负责保存分片数据。
  • Coordinating Node
    负责接受Client的请求,讲请求分发到合适的节点,最终把结果汇聚到一起
    每个节点默认都起到Coordinating Node的职责
  • 其它节点(Hot & Warm Node、Machine Learning Node)
GET /_cat/nodes?v
GET /_cat/nodes?v&h=id,ip,port,v,m

CAT Nodes API

1.4 分片
  • 主分片
    可以将数据分布到集群内的所有节点之上
    主分片数再索引创建时锁定,后续不允许修改,除非Reindex,解决数据水平扩展的问题。
  • 副本
    主分片的拷贝,可以动态调整,解决数据高可用的问题。
GET _cat/shards
GET _cat/shards?h=index,shard,prirep,state,unassigned.reason

PUT /blogs
{
  "settings": {
     "number_of_shards": 3, "number_of_replicas": 1
  }
}
1.5 倒排序

单词到文档Id的关系
倒排序包含两个部分:单词词典,倒排列表-由倒排索引项组成
倒排索引项包含:文档ID,词频TF,位置,偏移

POST _analyze
{
  "analyzer": "standard",
  "text": "Elasticsearch Server"
}
resp:
{
  "tokens" : [
    {
      "token" : "elasticsearch",
      "start_offset" : 0,
      "end_offset" : 13,
      "type" : "<ALPHANUM>",
      "position" : 0
    },
    {
      "token" : "server",
      "start_offset" : 14,
      "end_offset" : 20,
      "type" : "<ALPHANUM>",
      "position" : 1
    }
  ]
}

倒排序索引

1.6 Mapping
  • 什么是Mapping?
    定义索引中的字段的名称、数据类型、字段,倒排序的相关配置
    会把JSON 文档映射成Lucene所需的数据格式。

  • 什么是Dynamic Mapping?
    无需手动定义Mapping,ES会自动根据文档信息,推算出字段的类型。

显示参数设置

#写入文档,查看 Mapping
PUT mapping_test/_doc/1
{
  "firstName":"Chan",
  "lastName": "Jackie",
  "loginDate":"2018-07-24T10:29:48.103Z"
}

#查看 Mapping文件
GET mapping_test/_mapping

#Delete index
DELETE mapping_test

#dynamic mapping,推断字段的类型
PUT mapping_test/_doc/1
{
    "uid" : "123",
    "isVip" : false,
    "isAdmin": "true",
    "age":19,
    "heigh":180
}

#查看 Dynamic
GET mapping_test/_mapping


#默认Mapping支持dynamic,写入的文档中加入新的字段
PUT dynamic_mapping_test/_doc/1
{
  "newField":"someValue"
}

#该字段可以被搜索,数据也在_source中出现
POST dynamic_mapping_test/_search
{
  "query":{
    "match":{
      "newField":"someValue"
    }
  }
}

#修改为dynamic false
PUT dynamic_mapping_test/_mapping
{
  "dynamic": false
}

#新增 anotherField
PUT dynamic_mapping_test/_doc/10
{
  "anotherField":"someValue"
}


#该字段不可以被搜索,因为dynamic已经被设置为false
POST dynamic_mapping_test/_search
{
  "query":{
    "match":{
      "anotherField":"someValue"
    }
  }
}

get dynamic_mapping_test/_doc/10

#修改为strict
PUT dynamic_mapping_test/_mapping
{
  "dynamic": "strict"
}



#写入数据出错,HTTP Code 400
PUT dynamic_mapping_test/_doc/12
{
  "lastField":"value"
}

DELETE dynamic_mapping_test
1.7 Index Tempplate

帮助你设定 Mappings 和 Settings,并按照一定的规则,自动匹配到新创建的索引上

Index Templates

2、文档 CRUD

Document API

3、通过分析器进行分词

3.1 什么是 Analysis

分词,就是将文本转换为一系列单词的过程

#使用char filter进行替换
POST _analyze
{
  "tokenizer": "standard",
  "char_filter": [
      {
        "type" : "mapping",
        "mappings" : [ "- => _"]
      }
    ],
  "text": "123-456, I-test! test-990 650-555-1234"
}

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/indices-analyze.html

3.2 Analyzer 组成和工作机制

分词器是专门处理分词的组件,由三部分组成。Character Filters(针对原始文本处理),Tokenizer(按照规则切分单词),Token Filter(将切分的单词进行加工,小写,删除 stopwords, 增加同义词)

3.3 ES 内置的一些分词器
  • Standard Analyzer 默认分词器,按词切分,小写处理
  • Simple Analyzer 按照非字母切分,小写处理
  • Stop Analyzer
  • Whitespace Analyzer
  • Keyword Analyzer 不分词,直接将输入当作输出
  • Patter Analyzer
  • Language 提供了30多种常见语言的分词器
  • Customer Analyzer

ICU Analyzer
需要按照plugin Elasticsearch-plugin install analysis-icu,提供了Unicode的支持,更好的支持亚洲语言
IK 中文分词器

4、Search API

#URI Query
GET kibana_sample_data_ecommerce/_search?q=customer_first_name:Eddie

#REQUEST Body
POST kibana_sample_data_ecommerce/_search
{
  "profile": true,  
  "_source":["order_date"],
  "query":{
    "match_all": {}
  }
}

#脚本字段
GET kibana_sample_data_ecommerce/_search
{
  "script_fields": {
    "new_field": {
      "script": {
        "lang": "painless",
        "source": "doc['order_date'].value+'hello'"
      }
    }
  },
  "query": {
    "match_all": {}
  }
}

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-uri-request.html

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-request-body.html

5、聚合分析

#按照目的地进行分桶统计
GET kibana_sample_data_flights/_search
{
	"size": 0,
	"aggs":{
		"flight_dest":{
			"terms":{
				"field":"DestCountry"
			}
		}
	}
}



#查看航班目的地的统计信息,增加平均,最高最低价格
GET kibana_sample_data_flights/_search
{
	"size": 0,
	"aggs":{
		"flight_dest":{
			"terms":{
				"field":"DestCountry"
			},
			"aggs":{
				"avg_price":{
					"avg":{
						"field":"AvgTicketPrice"
					}
				},
				"max_price":{
					"max":{
						"field":"AvgTicketPrice"
					}
				},
				"min_price":{
					"min":{
						"field":"AvgTicketPrice"
					}
				}
			}
		}
	}
}



#价格统计信息+天气信息
GET kibana_sample_data_flights/_search
{
	"size": 0,
	"aggs":{
		"flight_dest":{
			"terms":{
				"field":"DestCountry"
			},
			"aggs":{
				"stats_price":{
					"stats":{
						"field":"AvgTicketPrice"
					}
				},
				"wather":{
				  "terms": {
				    "field": "DestWeather",
				    "size": 5
				  }
				}

			}
		}
	}
}

https://www.elastic.co/guide/en/elasticsearch/reference/7.1/search-aggregations.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值