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:desc1.2 索引
Index 是文档的容器。Index 提现逻辑空间概念;Shard 体现物理空间概念,索引中的数据分散在 Shard 中。
索引中的 Mapping 定义文档字段的类型。
索引中的 Setting 定义不同的数据分布。
#查看indices GET /_cat/indices/kibana*?v&s=index1.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" : "", "position" : 0 }, { "token" : "server", "start_offset" : 14, "end_offset" : 20, "type" : "", "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_test1.7 Index Tempplate
帮助你设定 Mappings 和 Settings,并按照一定的规则,自动匹配到新创建的索引上
Index Templates
2、文档 CRUDdocument 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 中文分词器
#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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)