个人学习ES之路-从安装入门到项目之实战window环境入门学习
大体分三个阶段:1.了解阶段 2.安装配置单例及集群阶段 3.实战学习阶段 4.总结阶段
一、了解阶段:
听说是目前最牛逼的搜索插件
二、安装阶段:
1.下载ES(6.4.2)
ES官网:https://www.elastic.co/cn/
方便下载:链接:https://pan.baidu.com/s/18GpfnqR77_aTFVkiYnHyMg 提取码:76yt
2.解压缩后进入bin目录,双击elasticsearch.bat
看到下入红色框,则是单例启动成功,进入 localhost:9200 可以看到返回的json串
3.插件安装Head安装
github上搜索elasticsearch-head 下载,解压缩后,用cmd界面,进入此目录,执行npm install(不支持npm请百度一下)
此时在elasticsearch-head下输入npm run start, 发现localhost:9100 后台界面,然后关闭命令。(相当于关闭head程序)
4.配置elasticsearch6-4-2/conf/elasticsearch.yml配置文件
#master的conf配置
http.cors.enabled: true
http.cors.allow-origin: “*”
cluster.name: zq
node.name: master
node.master: true
network.host: 127.0.0.1
【到这一步后,再次运行 elasticsearch.bat 程序 和 head目录下 npm run start ,进入9100界面 能看到master已运行】
5.配置集群:
新建两个文件夹 slave1和slave2 ,把最早下载的ES压缩包分别解压缩到这两个文件夹,然后分别修改各自的conf文件(如下), 然后 分别启动各自es程序, 刷新9100界面可以发现 集群创建完成
#slave1的conf配置:
cluster.name: name
node.name: slave1
network.host: 127.0.0.1
http.port: 8200
discovery.zen.ping.unicast.hosts: [“127.0.0.1”]
#slave2的conf配置:
cluster.name: name
node.name: slave1
network.host: 127.0.0.1
http.port: 8000
discovery.zen.ping.unicast.hosts: [“127.0.0.1”]
6.基本知识:
索引、类型、文档id (数据库、table、一行记录)
7.开始简单操作
用postman,put方式创建索引时候出现这个错误
"Rejecting mapping update to [people] as the final mapping would have more than 1 type: [woman, man]"
原因,es6.0版本后 不支持一次性插入多个类型
(1)创建索引:可以走head界面手动创建,或者走postman发起put请求创建:地址127.0.0.1:9200/people
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 1
},
"mappings": {
"man": {
"properties": {
"name": {
"type": "text"
},
"country": {
"type": "keyword"
},
"age": {
"type": "integer"
},
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
(2)数据插入
指定id插入:put请求、 postman地址:127.0.0.1:9200/people/man/1 (索引/类型/id 必须给id)
{
"name": "zq",
"country": "China",
"age": " 22",
"date": "1997-07-10"
}
自定id插入:post请求、 postman地址:127.0.0.1:9200/people/man/ (索引/类型/ 可以不指定id)
{
"name": "zqnb",
"country": "China",
"age": "18",
"date": "2019-07-10"
}
效果图:
(3)数据修改
post请求 :postman 请求地址为: 127.0.0.1:9200/people/man/id/ _update
{
"doc": {
"name": "zq666"
}
}
脚本修改方式: 127.0.0.1:9200/people/man/id/ _update
{
"script": {
"lang": "painless",
"inline": "ctx._source.age += params.age",
"params": {
"age": 100
}
}
}
(4)删除
删除数据:delete 请求 127.0.0.1:9200/people/man/1/
删除索引: head界面直接操作 或者 127.0.0.1:9200/people
(5)查询
简单查询: get请求 127.0.0.1:9200/people/man/id
条件查询:post请求 127.0.0.1:9200/people/man/id/ _search 【match 匹配】
{
"query": {
"match_all": {}
},
"from": 1,
"size": 1
}
{
"query": {
"match": {
"title": {XXX}
}
}
}
需要排序的 字段
{
"query": {
"match": {
"title": {XXX}
}
},
"sort": {
{"publish_date": {"order": "desc"}}
}
}
聚合查询:
{
"aggs": {
"group_by_word_count": {
"terms": {
"field": "word_count"
}
},
"group_by_publish_date": {
"terms": {
"field": "publish_date"
}
}
}
}
最大最小等查询:
{
"aggs": {
"grades_word_count": {
"stats": {
"field": "word_coun"
}
}
}
}
模糊查询:(match 包含一部分就可以 match_phrase包含整个 multi_match 多个条件模糊查询)
{
"query": {
"关键字": {
"author": "XX"
}
}
}
语法查询:包含: “query”: “XX and XX” 包含多个: “query”: “(XX and XX) or XXXX”
包含多个字段:
{
"query": {
"query_string": {
"query": "XX and XX"
}
}
}
包含多个字段:
{
"query": {
"query_string": {
"query": "XX or XX"
"fields": ["title, "author"]
}
}
}
具体化查询:
{
"query": {
"term": {
“XX”: “XX”
}
}
}
范围查询: gt lt 大于小于支持 数字 时间 类型、 now关键词代表 今天
{
"query": {
"range": {
“word_count”: {
“gte": 100,
"lte": 200
}
}
}
}
子条件查询【过滤查询】:filter context
{
"query": {
"bool": {
“filter": {
“term": {
"word_count": 100
}
}
}
}
}
符合条件查询: 固定分数查询: