Elasticsearch笔记

Elasticsearch笔记

创建索引
	PUT /lib/
	{
	"settings":{
		"index":{
			"number_of_shards":3,//分片数量
			"number_of_replicas":0//备份数量
		
		},
		"mappings":{	//不创建mapping,es将创建默认mapping
			"books":{
				"properties":{
					"title":{"type":"text"},
					"name":{"type":"text","analyzer":"standard"},
					"publish_date":{"type":"date","index":false}	//index :是否创建所有
				}
			}
		}
	}
	}
查看索引配置
	GET /lib/_settings    查看索引lib的配置
	GET _all_settings     查看所有索引的配置

新增doc
	put /lib/user/1       put方式需要指定id
	{
		"first_name":"jane",
		"last_name":"smith"
	}

	POST /lib/user/       POST方式可不需要指定id,id由es生成。(这有点像restful风格,put是修改,哪有修改不需要指定id的呢)
	{
		"first_name":"tonny",
		"last_name":"swing"
	}

查询
	GET /lib/user/1      通过id查询
	GET /lib/user/1?_source=first_name,last_name     只查看特定字段
	GET _search   GET /lib/_search  查所有
	GET /lib/user/_search?q=last_name:tonny&sort=age:desc   条件查询(条件是模糊查询即分词)并排序
	GET /lib/user/_search			term,terms查找
	{
		"query":{
			"term":{"name":"zhaoliu"}
		},
		"_source":{
			"includes":"ad*",
			"excludes":""
		},
		"sort":[
			{
				"age":{
					"order":"desc"
				}
			}
		]
	}
	GET /lib/user/_search
	{
		"query":{
			"terms":{
				"interests":["zhaoliu","change"]
			}
		}
	}
	GET /lib/user/_search
	{
		"from":0,			分页
		"size":2,
		"version":true,			是否返回版本号
		"query":{
			"terms":{
				"interests":["zhaoliu","change"]
			}
		}
	}
	GET /lib/user/_search  			match查询,会对指定的match条件进行分词
	{
		"query":{
			"match":{
				"name":"zhaoliu zhangsan"		这两个人都会被查出来
			}
		}
	}
	GET /lib/user/_search			查询所有文档
	{
		"query":{
			"match_all":{}
		}
	}
	GET /lib/user/_search			多条件分词查找
	{
		"query":{
			"multi_match":{
				"query":"changge",
				"fields":["interests","name"]
			}
		}
	}
	GET /lib/user/_search			短语匹配,值相同,顺序相同才能被查出来
	{
		"query":{
			"match_phrase":{		短语匹配,值相同,顺序相同才能被查出来
				"interests":"changge,ceshl",
			},
			"match_phrase_prefix":{		前缀匹配
				"interests":"ceshl",
			},
			"range":{					范围查找
				"birthday":{
					"from":"1990-10-10",
					"to":"2018-05-01",
					"include_lower":true,
					"include_upper":true
				}
			}
			"wildcard":{				通配符查找
				"name":"li?i"
			},
			"fuzzy":{					模糊查询  这个能查到   name=zhaoliu
				"name":"zholiu"
			},
			"bool":{					过滤查询,效率比match快
				"filter":[
					{"term":{"itemID":"ID23123"}}    分词ID会被转换成小写,需改成小写才能查到
				],
				"should":[							满足其中一个
					{"term":{"termID":""}},
					{"term":{"termID":""}}
				],
				"must":[							同时满足
					{"term":{"termID":""}},
					{"term":{"termID":""}}
				],
				"should":[							嵌套条件
					{"term":{"termID":""}},
					{"bool":{
						"must":[							
							{"term":{"termID":""}},
							{"term":{"termID":""}}
						]}
					}
				],
				"filter":{									
					"range":{							范围过滤:gt; >,lt;<,gte;>=,lte;<=
						"price":{
							"gt":25,
							"lt":50
						}
					},
					"exists":{							非空查找
						"field":"price"
					}
				}
			}

		},
		"highlight":{					指定返回值高亮(返回值会被<em>标签包裹)
			"fields":{
				"interests":{}
			}
		},
										
	}
	#聚合查询	max,min,sum,avg,cardinality(基数值即不相同的个数),terms(分组)
	GET /lib/user/_search
	{
		"size":0,						每条记录都会插出来,如果不关心则设置为0
		"aggs":{
			"price_of_max":{			自定义名称,
				"max":{
					"field":"price"		聚合计算的字段
				}
			},
			"price_of_max":{
				"min":{					最小值
					"field":"price"
				}
			}
		}
	}
	示例:对那些有唱歌兴趣的用户按年龄分组,并求每组的平均年龄,并按平均年龄排序
	GET /lib/user/_search
	{
		"size":0,
		"query":{
			"mathc":{
				"interests":"changge"
			}
		},
		"aggs":{
			"age_of_group":{
				"terms":{
					"field":"age",
					"order":{
						"age_of_avg":"desc"      #这个值来自下面
					}
				},
				"aggs":{
					"age_of_avg":{
						"avg":{
							"field":"age"
						}
					}
				}
			}
		}
	}
	#复合查询
	1.bool查询:should,must,must_not,filter
	2.constant_score(不去计算分数,优化查询速度)
	
修改-更新
	put /lib/user/1       put方式需要指定id(覆盖的方式)
	{
		"first_name":"jane",
		"last_name":"smith"
	}

	POST /lib/uer/1/_update   修改指定字段
	{
		"doc":{
			"age":30
		}
	}

删除
	DELETE /lib/user/1      通过id删除文档
	DELETE lib             删除索引



批量操作(multi get api)
	GET /_mget
	{
		"docs":[
		{
			"_index":"lib",
			"_type":"user",
			"_id":1,
			"_source":"last_name"		//获取指定字段
		},{
			"_index":"lib",
			"_type":"user",
			"_id":2
		},{
			"_index":"lib",
			"_type":"other",
			"_id":3
		}
		]
	}
简化
	GET /lib/user/_mget
	{
		"docs":[
			{
				"_id":1
			},
			{
				"_id":2,
				"_type":user
			}
		]
	}
	GET /lib/user/_mget
	{
		"ids":["1","2"]
	}

版本控制
	put /lib/user/1?version=2       版本(内部版本控制)
	{
		"first_name":"jane",
		"last_name":"smith"
	}
	put /lib/user/1?version=2&version_type=external       版本(外部版本控制,如时间戳,版本大于内部版本才可执行)
	{
		"first_name":"jane",
		"last_name":"smith"
	}

mapping (确定数据类型)
	查看maping
	GET /lib/user/_mapping
	数据类型:
		------------------基础数据类型-----------------------
		字符型:text,keyword    (string)
			text会进行分词,keyword不会分词
		数字型:long,integer,short,byte,double,float
		日期型:date
		布尔型:boolean
		二进制型:binary
		------------------复杂数据类型-----------------------
		数组类型:Array datatype,数组类型不需要专门指定数组元素的type,eg:
			字符型数组:["one","two"]
			整型数组:[1,2]
			其他如对象数组等
		对象类型(Object datatype):_Object_ 用于单个json对象
		嵌套类型(Nested datatype):_nested_用于json数组
		------------------地理位置类型-----------------------
		地理坐标类型(Geo-point datatype):_geo_point_ 用于经纬度坐标
		地理形状类型(Geo-Shape datatype):_geo_shape_ 用于类似多边形的复杂形状
		------------------特定类型-----------------------
		IPv4:_ip_ 用于IPv4地址
		Completion类型:_completion_ 提供自动补全建议
		TOken count:_token_count_用于统计做了标记的字段的index数目,该值会一直增加,不会因为过滤条件而减少
	相关属性:
		store :
		•index,:true	〃分词,不分词: false.设苗成false,宇段将不約E汞弓l 
		"analyzer":ik	//指定分词器,默认分词器为standard analyzer 
		"boosf:1.23     //字段级别的分数加权,默认值是1.0
		"doc_values":false   //对not_analyzed字段.软认都是开启,分词字段段不能使用,对播序和聚合能提升较大性能,节约内存 
		"fielddata":{"format":"disabled"}   //针对分词字段,参与排序或聚合时能提高性能,不分词字段统一简易使用doc_value
		"fields-:rraW:rtype_:,stringVinde)C:-not_analyzed]} /河 以 字 段 理 供 多 种 素 引 橫 式 , 同 一 ^ 宇 段 的 但, 一个分词,一^不分词 
		"ignore_above":100 	//超过100个字符的文本,将会被忽略,不被索引
		"include_in_all":ture 	//设里是否此字段©含在_all芋段中.!K认是true,除3EindexiS面^no选坻
		"index_options?docs7/4个可选梦数docs (S引文档引,freqs (文括号+词節,positions (文挡号+3+位里,通常用丰拒离音®), offsets (文档 
		号+词_+位舌+偏移里,通常被使用茌高??宇段〉分词字段软认^position,其他的软认Sdo«
		•11011115:{>1316":111^._丨03戊叩*:_丨3*}〃分词字段馱认随.不分词宇段:软认{_6阳1)6-15的,厗«长霣因子和索引时1>051.途议对需要参与坪分宇段 
		使用,会坂外13加内存消耗里
		_nun_va丨ue’:'NULL_〃iS舌一^»失字段的财纽七值,只有string可以使用,分词字段的null值也会被分词
		"position_inaeament_gap":0//^明距W受询或近•可以设舌在多但字段的政IB上火分词字段上,爸iS时可指定slopi硕§,软认值呈100 

	
相关概念
	1.乐观锁( Optimistic Locking (版本号控制数据有效性) 相对悲观锁而言,乐观锁机制采取了更加宽松的加锁机制。悲观锁大多数情况下依靠数据库的锁机制实现,以保证操作最大程度的独占性。但随之而来的就是数据库性能的大量开销,特别是对长事务而言,这样的开销往往无法承受。而乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。


相关度分数计算
	算法:TF/IDF(term frequency&Inverse Document Frequency)词条出现的频率
	_explain用法
	
	
scroll滚动基数实现大数据量搜索  --提高性能
	第一次查询 es创建#快照
	GET /lib/user/_search?scroll=1m     1m表示这一批在1分钟内查询出来
	{
		"query":{
			"match_all":{}
		},
		"sort":["_doc"],			取消按相关度分数排序可避免相关度分数计算,从而提高效率
		"size":3					这批查询3}
	
	第二次查询
	GET /_search/scroll
	{
		"scroll":"1m",
		"scroll_id":""				//第一次返回到scroll_id
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	

你可能感兴趣的:(elasticsearch,elasticsearch)