欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

es入门2

程序员文章站 2022-07-05 14:00:27
...
语法

PUT /megacorp/employee/1
{
    "first_name" : "John",
    "last_name" :  "Smith",
    "age" :        25,
    "about" :      "I love to go rock climbing",
    "interests": [ "sports", "music" ]
}

PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

//  HTTP 命令由 PUT 改为 GET 可以用来检索文档,同样的,可以使用 DELETE 命令来删除文档,以及使用 HEAD 指令来检查文档是否存在。如果想更新已存在的文档,只需再次 PUT 。
GET /megacorp/employee/1

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

// Elasticsearch 默认按照相关性得分排序,即每个文档跟查询的匹配程度。
GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            },
            "filter": {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            }
        }
    }
}

GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
          "must": {
              "match":{
                "about" : "rock climbing"
              }
            },
          "filter": {
          "range": {
            "age": {
              "gte": 20,
              "lte": 32
            }
          }
        }
        }
    }
}

GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
          "must": {
              "match_phrase":{
                "about" : "rock climbing"
              }
            },
          "filter": {
          "range": {
            "age": {
              "gte": 20,
              "lte": 32
            }
          }
        }
          
        }
    }
}

bool查询来实现你的需求。这种查询将多查询组合在一起,成为用户自己想要的布尔查询。
它接收以下参数:
	must : 文档必须匹配这些条件才能被包含进来。
	must_not : 文档必须不匹配这些条件才能被包含进来。
	should : 如果满足这些语句中的任意语句,将增加_score,否则,无任何影响。它们主要用于修正每个文档的相关性得分。
	filter : 必须匹配,但它以不评分、过滤模式来进行。这些语句对评分没有贡献,只是根据过滤标准来排除或包含文档。

// aggs、 suggestions、geolocation、percolation、fuzzy 、 partial matching


// 集群健康
GET /_cluster/health

//naming info
1. 索引——保存相关数据的地方,索引实际上是指向一个或者多个物理分片的逻辑命名空间。
2. 一个分片是一个底层的工作单元,它仅保存了全部数据中的一部分。分片是数据的容器,文档保存在分片内,分片又被分配到集群内的各个节点里。
3. Elasticsearch 是利用分片将数据分发到集群内各处的。当你的集群规模扩大或者缩小时, Elasticsearch 会自动的在各节点中迁移分片,使得数据仍然均匀分布在集群里。
4. 一个分片可以是 主 分片或者 副本 分片。 索引内任意一个文档都归属于一个主分片,所以主分片的数目决定着索引能够保存的最大数据量。
5. 节点是Elasticsearch的一个实例,集群就是有节点组成


// partial-updates
GET /megacorp/employee/_search

POST /megacorp/employee/3/_update
{
  "doc":{
    "age":36,
    "views":1
  }
}

GET /megacorp/employee/3

POST /megacorp/employee/3/_update?retry_on_conflict=5 
{
   "script" : "ctx._source.views+=1",
   "upsert": {
       "views": 0
   }
}
GET /megacorp/employee/3


// mget
GET /megacorp/employee/_mget
{
  "ids":[1,2]
}

GET /megacorp/employee/_mget
{
  "ids":[1,2000]
}

//批量操作编辑 bulk
POST /_bulk
{ "delete": { "_index": "website", "_type": "blog", "_id": "123" }} 
{ "create": { "_index": "website", "_type": "blog", "_id": "123" }}
{ "title":    "My first blog post" }
{ "index":  { "_index": "website", "_type": "blog" }}
{ "title":    "My second blog post" }
{ "update": { "_index": "website", "_type": "blog", "_id": "123", "_retry_on_conflict" : 3} }
{ "doc" : {"title" : "My updated blog post"} } 



// get config(_mapping)
GET /megacorp/_mapping/employee


Elasticsearch使用一种称为倒排索引的结构,它适用于快速的全文搜索。一个倒排索引由文档中所有不重复词的列表构成,对于其中每个词,有一个包含它的文档列表。
分析包含下面的过程:
	首先,将一块文本分成适合于倒排索引的独立的词条,
	之后,将这些词条统一化为标准格式以提高它们的“可搜索性”,或者recall
分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里:字符过滤器、分词器、Token过滤器
字符过滤器
	首先,字符串按顺序通过每个字符过滤器。他们的任务是在分词前整理字符串。一个字符过滤器可以用来去掉HTML,或者将&转化成`and`。
分词器
	其次,字符串被分词器分为单个的词条。一个简单的分词器遇到空格和标点的时候,可能会将文本拆分成词条。
Token过滤器
	最后,词条按顺序通过每个token过滤器。这个过程可能会改变词条(例如,小写化Quick),删除词条(例如,像a`,`and`,`the等无用词),或者增加词条(例如,像jump和leap这种同义词)。

测试分析器
GET /_analyze
{
  "analyzer": "standard",
  "text": "Text to analyze"
}	

验证查询
GET /megacorp/_validate/query?explain
{
   "query": {
      "match" : {
         "about" : "really powerful"
      }
   }
}

返回结果默认按相关度 max_score 排序, 查询会计算结果
但是如果查询中有排序, 不会计算 max_score, 如果指定按相关度排序_score,  则会重新计算_score

GET /megacorp/_search
{
   "query": {
      "match" : {
         "about" : "rock"
      }
   }
}

GET /megacorp/_search
{
   "query": {
      "match" : {
         "about" : "rock"
      }
   },
  "sort": { "age": { "order": "asc" }}
}

GET /megacorp/_search
{
   "query": {
      "match" : {
         "about" : "rock"
      }
   },
  "sort": { 
      "age": { "order": "asc" },
      "_score": { "order": "asc" }
  }
}


执行分布式检索
	在 search 接口返回一个 page 结果之前,多分片中的结果必须组合成单个排序列表。为此,搜索被执行成一个两阶段过程,我们称之为 query then fetch 。
	
索引-创建索引
	PUT /my_index
		{
			"settings": { ... any settings ... },
			"mappings": {
				"type_one": { ... any mappings ... },
				"type_two": { ... any mappings ... },
				...
			}
		}
索引-删除索引
	DELETE /my_index
	DELETE /index_one,index_two
	DELETE /index_*
	DELETE /_all
	DELETE / * 
	
索引-索引设置
	number_of_shards : 每个索引的主分片数,默认值是 5 。这个配置在索引创建后不能修改。
	number_of_replicas : 每个主分片的副本数,默认值是 1 。对于活动的索引库,这个配置可以随时修改。
	
	可以创建只有 一个主分片,没有副本的小索引
		PUT /my_temp_index
			{
				"settings": {
					"number_of_shards" :   1,
					"number_of_replicas" : 0
				}
			}
	可以用 update-index-settings API 动态修改副本数:
		PUT /my_temp_index/_settings
			{
				"number_of_replicas": 1
			}
索引-配置分析器
		PUT /spanish_docs
			{
				"settings": {
					"analysis": {
						"analyzer": {
							"es_std": {
								"type":      "standard",
								"stopwords": "_spanish_"
							}
						}
					}
				}
			}
索引-动态映射
	dynamic 配置来控制动态映射 ,可接受的选项如下:
		true : 动态添加新的字段--缺省
		false : 忽略新的字段
		strict : 如果遇到新字段抛出异常
	配置参数 dynamic 可以用在根 object 或任何 object 类型的字段上
		PUT /my_index
		{
			"mappings": {
				"my_type": {
					"dynamic":      "strict", 
					"properties": {
						"title":  { "type": "string"},
						"stash":  {
							"type":     "object",
							"dynamic":  true 
						}
					}
				}
			}
		}
		my_type :如果遇到新字段,对象 my_type 就会抛出异常。
		stash :遇到新字段就会动态创建新字段。
	日期检测
		PUT /my_index
			{
				"mappings": {
					"my_type": {
						"date_detection": false
					}
				}
			}
		使用这个映射,字符串将始终作为 string 类型。如果你需要一个 date 字段,你必须手动添加。
索引-重新索引
	批量重新索引
		同时并行运行多个重建索引任务,但是你显然不希望结果有重叠。正确的做法是按日期或者时间 这样的字段作为过滤条件把大的重建索引分成小的任务
		GET /old_index/_search?scroll=1m
			{
				"query": {
					"range": {
						"date": {
							"gte":  "2014-01-01",
							"lt":   "2014-02-01"
						}
					}
				},
				"sort": ["_doc"],
				"size":  1000
			}
索引-索引别名和零停机
	有两种方式管理别名: _alias 用于单个操作, _aliases 用于执行多个原子级操作。
	创建索引 my_index_v1 , 设置别名 my_index 指向 my_index_v1 
		PUT /my_index_v1 
		PUT /my_index_v1/_alias/my_index 
	检测这个别名指向哪一个索引
		GET /*/_alias/my_index
	哪些别名指向这个索引
		GET /my_index_v1/_alias/*
		
		同时并行运行多个重建索引任务,但是你显然不希望结果有重叠。正确的做法是按日期或者时间 这样的字段作为过滤条件把大的重建索引分成小的任务
		GET /old_index/_search?scroll=1m
			{
				"query": {
					"range": {
						"date": {
							"gte":  "2014-01-01",
							"lt":   "2014-02-01"
						}
					}
				},
				"sort": ["_doc"],
				"size":  1000
			}

 

上一篇: ES6入门

下一篇: 解码方法