7.elasticsearch集群搭建以及一些基本操作

首先说明ElasticSearch版本号5.5.2

目录介绍

  • bin目录 存放es启动脚本
  • config目录 存放es配置文件
  • lib目录 第三方库依赖库
  • modules 模块目录
  • plugins 存放第三方插件目录

安装集群

master节点配置

cluster.name: wali
node.name: master
node.master: true
network.host: 127.0.0.1

slave1节点配置

cluster.name: wali
node.name: slave1
network.host: 127.0.0.1
http.port: 8200
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

slave2节点配置

cluster.name: wali
node.name: slave2
network.host: 127.0.0.1
http.port: 8000
discovery.zen.ping.unicast.hosts: ["127.0.0.1"]

电脑配置不行可以修改jvm.options

-Xms1g
-Xmx1g

基础概念

  • 集群和节点 集群是一个或多个节点组成的集合
  • 索引 含有相同属性的文档集合
  • 类型 索引可以定义一个或多个类型, 文档必须属于一个类型
  • 文档 文档是可以被索引的基本数据单位
  • 分片 每个索引都有多个分片,每个分片是一个Lucene索引
  • 备份 拷贝一份分片就完成了分片备份

基本用法

RESTful API

	API基本格式		http://<ip>:<port>/<索引>/<类型><文档id>
	常用HTTP动词	GET/PUT/POST/DELETE

创建索引

在这里插入图片描述
在这里插入图片描述
分片数默认为5,副本数默认1(如果只有一台机器设置为0)
在这里插入图片描述

创建结果如下,mapping为空标识 非结构化索引
在这里插入图片描述

创建结构化索引

{
  "novel": {
    "properties": {
      "title": {
        "type": "text"
      }
    }
  }
}

在这里插入图片描述
前往查看效果如下:
在这里插入图片描述

通过postman创建索引

{
	"settings": {
		"number_of_shards": 3,
		"number_of_replicas": 0
	},
	"mappings": {
		"man": {
			"properties": {
				"name": {
					"type": "text"
				},
				"country": {
					"type": "keyword"
				},
				"age": {
					"type": "integer"
				},
				"date": {
					"type": "date",
					"format": "yyy-MM--dd HH:mm:ss||yyy-MM-dd||epoch_millis"
				}
			}
		},
		"woman": {
			"properties": {
				"name": {
					"type": "text"
				},
				"country": {
					"type": "keyword"
				},
				"age": {
					"type": "integer"
				},
				"date": {
					"type": "date",
					"format": "yyy-MM--dd HH:mm:ss||yyy-MM-dd||epoch_millis"
				}
			}
		}
	}
}

创建截图展示
elasticsearch-head展示

插入文档

指定文档id插入

{
	"name": "张三",
	"country": "China",
	"age": 30,
	"date": "1996-11-18"
}

postman截图
elasticsearch-head截图

自动产生文档id插入

{
	"name": "张三1",
	"country": "China",
	"age": 40,
	"date": "1996-11-18"
}

postman截图
elasticsearch-head截图

修改文档

直接修改文档

127.0.0.1:9200/people/man/1/_update
{
	"doc": {
		"name": "张三修改"
	}
}

截图展示

脚本修改文档

127.0.0.1:9200/people/man/1/_update
{
	"script": {
		"lang": "painless",
		"inline": "ctx._source.age += params.age",
		"params": {
			"age": 1
		}
		
	}
}

截图展示

删除

删除文档

127.0.0.1:9200/people/man/1/

图片展示

删除索引

127.0.0.1:9200/test/

在这里插入图片描述

搜索

创建搜索

127.0.0.1:9200/books
{
	"settings": {
		"number_of_shards": 5,
		"number_of_replicas": 0
	},
	"mappings": {
		"novel": {
			"properties": {
				"word_count": {
					"type": "integer"
				},
				"author": {
					"type": "keyword"
				},
				"title": {
					"type": "text"
				},
				"publish_date": {
					"type": "date",
					"format": "yyy-MM--dd HH:mm:ss||yyy-MM-dd||epoch_millis"
				}
			}
		}
	}
}

创建索引
创建一些数据作为搜索前提条件

按照指定文档Id查询

在这里插入图片描述

搜索条件

took响应时间5ms
hits响应的结果
total总共数据11条。默认只返回10条
在这里插入图片描述
添加新的条件 size返回条数
在这里插入图片描述
查找title中有ElasticSearch,返回数据默认以_score倒排
在这里插入图片描述
添加自己的排序,按照publish_date降序排列
在这里插入图片描述

聚合查询

group_by_word_count随便起名字
在这里插入图片描述
查询结果,1000的有5个
在这里插入图片描述
两个聚合条件
在这里插入图片描述
查询结果 group_by_word_count和上面一样,另一个是 1997-01-01有2条数据
在这里插入图片描述
对word_count进行计算

127.0.0.1:9200/books/_search
POST
{
	"aggs": {
		"grades_word_count": {
			"stats": {
				"field": "word_count"
			}
		}
	}
}

count总共11条,min最小,max最大,avg平均,sum总和
在这里插入图片描述
也可以直接将stats改为min

{
	"aggs": {
		"grades_word_count": {
			"min": {
				"field": "word_count"
			}
		}
	}
}

运行结果如下
在这里插入图片描述

高级查询

子条件查询 特定字段查询所指特定值

Query Context

在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来表示匹配的程度,旨在判断目标文档和查询条件匹配的有多好。

全文本查询 针对文本类型数据

数据展示
在这里插入图片描述
模糊匹配关键词match
搜索author为瓦力

POST请求方式
127.0.0.1:9200/books/_search
{
	"query": {
		"match": {
			"author": "瓦力"
		}
	}

}

在这里插入图片描述
把上面条件进行修改如下,它会匹配ElasticSearch和入门这两个,所以返回上面熟的id为8,2,3,4,9的数据(结果太长截图不好看)

{
	"query": {
		"match": {
			"title": "ElasticSearch入门"
		}
	}

}

如果非要匹配title为ElasticSearch入门,则需要用到习语匹配,返回数据只剩下一条满足的id为8

{
	"query": {
		"match_phrase": {
			"title": "ElasticSearch入门"
		}
	}

}

进行多个字段的匹配查询,由于上面数据中title和author没有公共的,随意改一个就行
在这里插入图片描述
查询代码如下

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"multi_match": {
			"query": "瓦力",
			"fields": ["author","title"]
		}
	}

}

语法查询
查询结果是id为4 和 3
如果把括号和OR Python去掉查询结果为4

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"query_string": {
			"query": "(ElasticSearch AND 好) OR Python"
		}
	}

}

指定字段查询,查询结果Id为8,11,4,9

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"query_string": {
			"query": "ElasticSearch  OR 瓦力",
			"fields": ["author","title"]
		}
	}

}
字段级别查询 针对结构化数据,如数字、日期等

查询word_count为1000的数据,查询结果id为10,4,1,7,11

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"term": {
			"word_count": 1000
		}
	}

}

查询author为瓦力,查询结果id为8

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"term": {
			"author": "瓦力"
		}
	}

}

支持范围查询,查询word_count,大于等于1000小于等于2000,查询结果id为10,2,4,1,7,3,11
去掉e相当于少了等于

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"range": {
			"word_count": {
				"gte": 1000,
				"lte": 2000
			}
		}
	}

}

查询日期,2000-01-01到2000-12-31书籍,查询结果id为10,1,11

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"range": {
			"publish_date": {
				"gte": "2000-01-01",
				"lte": "2000-12-31"
			}
		}
	}

}

查询日期,2017-08-15到现在书籍,查询结果id为8,9

POST方式
127.0.0.1:9200/books/_search
{
	"query": {
		"range": {
			"publish_date": {
				"gte": "2017-08-15",
				"lte": "now"
			}
		}
	}

}
Filter Context

在查询过程中,值判断该文档是否满足条件,只有Yes或No
相对于query较快,es会对数据进行缓存

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"bool": {
			"filter": {
				"term": {
					"word_count": 10000
				}
			}
		}
	}

}

复合条件查询 以一定的逻辑组合子条件查询

固定分数查询

只支持filter,返回_score为1.0,boost指定_score的值

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"constant_score": {
			"filter": {
				"match": {
					"title": "ElasticSearch"
				}
			}
		}
	}
}
{
	"query": {
		"constant_score": {
			"filter": {
				"match": {
					"title": "ElasticSearch"
				}
			},
			"boost": 2
		}
	}
}
布尔查询

里面条件是或的关系,只要满足一个就行。查询结果id为8,4,9

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"bool": {
			"should": [
				{
					"match": {
						"author": "瓦力"
					}
				},
				{
					"match": {
						"title": "ElasticSearch"
					}
				}
			]
		}
	}
}

查询前添加了一条数据
在这里插入图片描述
里面条件是并且的关系,查询结果id为8,12

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"author": "瓦力"
					}
				},
				{
					"match": {
						"title": "ElasticSearch"
					}
				}
			]
		}
	}
}

上面条件再加一个word_count条件,查询结果id为12

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"author": "瓦力"
					}
				},
				{
					"match": {
						"title": "ElasticSearch"
					}
				}
			],
			"filter": [
				{
					"term": {
						"word_count": 1000
					}
				}
			]
		}
	}
}

mast_not不满足条件的结果,查询结果id为5,9,10,2,4,6,1,7,3,11

POST
127.0.0.1:9200/books/_search
{
	"query": {
		"bool": {
			"must_not": [
				{
					"term": {
						"author": "瓦力"
					}
				}
			]
		}
	}
}
发布了77 篇原创文章 · 获赞 33 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39337886/article/details/103817622