elasticsearch基本使用--《elasticsearch核心技术与实战》笔记

Posted jazon@

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch基本使用--《elasticsearch核心技术与实战》笔记相关的知识,希望对你有一定的参考价值。

CAT查看elasticsearch索引的情况

  • 查看索引信息
GET /_cat/indices/kibana_sample_data_flights?v&s=index
healthstatusindexuuidpri(主分片)rep(副本数)docs.count(文档总数)docs.deletedstore.size(主分片的大小)pri.store.size
greenopenkibana_sample_data_flightsQ6oQk43eSiW_hrP8rrCzpQ101305906.2mb6.2mb
  • 查看节点
get _cat/nodes?v
  • 查看索引信息
GET indexName

节点概念

  • master-eligble和master

master-eligible node和 master node,每个节点启动后,默认就是一个Master eligible节点,可以设置node.master:false禁止。master-eligible节点可以参与选主流程,成为Master节点,当一个节点启动时候,它会将自己选举成Master节点。每个节点上都保存了集群的状态,只有Master节点才能修改集群的状态信息。集群状态维护了一个集群的必要信息,所有节点的信息,所有的索引和其相关的Mapping与Setting信息,分片路由信息。任意节点都能修改信息会导致数据的不一致。

  • DataNode和Coordinating Node

DataNode负责保存分片数据,CoordinatingNode负责接受Client的请求,将请求分发到合适的节点,最终将结果汇集到一起,每个节点都起到了CoordinatingNode的作用。

文档CRUD

# create document,自动生成Id
POST users/_doc
{
	"user" : "Mike",
    "post_date" : "2019-04-15T14:12:12",
    "message" : "trying out Kibana"
}
#create document. 指定 ID 如果已经存在,就报错
PUT users/_create/1
{
     "user" : "Jack",
    "post_date" : "2019-05-15T14:12:12",
    "message" : "trying out Elasticsearch"
}
# delete document
DELETE users/_doc/1
# update document, 整篇文档被删除又重新新增
PUT users/_doc/1
{
	"user" : "Mike"
}
#在原文档上增加字段
POST users/_update/1/
{
    "doc":{
        "post_date" : "2019-05-15T14:12:12",
        "message" : "trying out Elasticsearch"
    }
}
# 查文档
GET users/_doc/1
# bulk操作
POST _bulk
{ "index" : { "_index" : "test", "_id" : "1" } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test2", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }
# 批量查询
GET /_mget
{
    "docs" : [
        {
            "_index" : "test",
            "_id" : "1"
        }
    ]
}
# 指定索引,批量查询
GET /test/_mget
{
    "docs" : [
        {
            "_id" : "1"
        },
        {
            "_id" : "2"
        }
    ]
}

image.png

倒排索引入门

  • Analyzer的组成

image.png

  • 使用分词器分析text
POST _analyze
{
  "analyzer": "standard",
  "text": "Mastering Elasticsearch"
}

POST _analyze
{
  "analyzer": "standard",
  "text": "Elasticsearch Server"
}

POST _analyze
{
  "analyzer": "standard",
  "text": "Elasticsearch Essentials"
}

Search API概览

  • 指定查询的索引

image.png

URI查询

使用"q",指定查询字符串,“query string syntax”,KV键值对。
image.png

RequestBody

image.png

# 查询titile即出现last又出现christmas的文档
POST movies/_search
{
  "query": {
    "match": {
      "title": {
        "query": "last christmas",
        "operator": "and"
      }
    }
  }
}
# 查询tile出现one love词语的文档,通过slop还可以指定两个次之间的距离
POST movies/_search
{
  "query": {
    "match_phrase": {
      "title":{
        "query": "one love"

      }
    }
  }
}

Query String&Simple Query String

  • query String

image.png

  • Simple Query String Query

image.png

Dynamic Mapping和常见字段类型

  • 字段的数据

image.png

  • 能否更改Mapping的字段类型

image.png

显式Mapping设置与常见参数介绍

PUT movies
{
  "mappings": {
     // define your mappings here
	}
}
  • 设置null_value,应用于需要对Null值实现搜索

image.png

多字段特性及配置自定义Analyzer

  • 多字段类型,用于精确匹配及使用不同的analyzer

image.png

  • exact Values VS Full Text

image.png

  • Elasticsearch为每一个字段创建一个倒排索引,Exact Value在索引时,不需要做特殊的分词处理。

Index Template和Dynamic Template

  • Index Template帮助设定Mapping和Settings,并按照一定的规则,自动匹配到新创建的索引上。

image.png

  • dynamic Template设置elasticasearch自动识别字段类型的依据

image.png

Elasticsearch聚合分析

聚合的分类
  • Bucket Aggregation,一些满足特定条件的文档的集合
  • Metric Aggregation,一些数学运算,可以对文档字段进行统计分析
  • Pipeline Aggreation,对其他的聚合结果进行二次聚合
  • Martrix Aggration,支持多个字段的操作并提供一个结果矩阵
GET kibana_sample_data_flights/_search
{
	"size": 0,
	"aggs":{
		"flight_dest":{
			"terms":{
				"field":"DestCountry"    // Bucket聚合
			},
			"aggs":{
				"stats_price":{            //嵌套 Metric聚合
					"stats":{
						"field":"AvgTicketPrice"
					}
				},
				"wather":{
				  "terms": {                // Bucket嵌套Bucket
				    "field": "DestWeather",
				    "size": 5
				  }
				}
			}
		}
	}
}
// 结果集
{"aggregations" : {
    "flight_dest" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 745,
      "buckets" : [
        {
          "key" : "IT",
          "doc_count" : 539,
          "wather" : {
            "doc_count_error_upper_bound" : 0,
            "sum_other_doc_count" : 107,
            "buckets" : [
              {
                "key" : "Sunny",
                "doc_count" : 105
              },
              {
                "key" : "Cloudy",
                "doc_count" : 99
              },
              {
                "key" : "Rain",
                "doc_count" : 97
              },
              {
                "key" : "Clear",
                "doc_count" : 85
              },
              {
                "key" : "Heavy Fog",
                "doc_count" : 46
              }
            ]
          },
          "stats_price" : {
            "count" : 539,
            "min" : 103.80162048339844,
            "max" : 1189.5384521484375,
            "avg" : 566.2765519349164,
            "sum" : 305223.0614929199
          }
        }
      ]
     }
 	}
 }

以上是关于elasticsearch基本使用--《elasticsearch核心技术与实战》笔记的主要内容,如果未能解决你的问题,请参考以下文章

elastic基本配置

ElasticSearch 基本操作

elastic(10) 基本查询

ElasticSearch 基本使用

elastic querybuilders怎么添加多个参数

elasticsearch入门笔记