2020-06-23
连接上集群后现在我们来使用 ELASTICSEARCH进行学习
-ES数据模型
Index:索引,由多个Document组成
Type:索引类型,6.x中仅支持一个,以后将逐渐被移除
Document:文档,由多个Field组成
Field:字段,包括字段名与字段值

-文档元数据:
_index:索引名
_type:索引类型
_id:文档编号
_version:文档版本号用于并发控制
_score:在搜索结果中的评分

集群连接完毕后,打开浏览器输入:master的IP地址进行连接

先按照以下步骤新增一个索引

-索引名称规范

(1) 只支持小写字母

(2)不包括“\ / * ? " < > | ` (空格) , #”

(3)“:”在7.0前支持

(4) 不能以“- _ +”开头

(5) 不能为“.”或“…”

(6)不超过255字节

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET


es中类似于FIND_IN_SET es的index_elasticsearch_02


es中类似于FIND_IN_SET es的index_数据_03

一、put 增加 / 更新

//方法一

使用head插件向ES中新增一条数据并进行数据浏览

步骤如上:
若再次点击提交请求,则当前插入的内容会将前一条数据覆盖(更新)
//方法二

通过kibana插入数据

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET_04

带参数创建索引

PUT demo
{
    "settings" : {
        "index" : {
            "number_of_shards" : 2,//主分页
            "number_of_replicas" : 2 //副本
        }
    }
}

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET_05


完事运行绿色三角

显示左侧若能正常显示则插入成功

es中类似于FIND_IN_SET es的index_elasticsearch_06

POST /_buik -->批量插入

这里要用到bulk
—必须写在同一行
{“ceate”:{"_index":索引,“_type”:类型,“_id”:编号}}
PUT /索引/类型
PUT /索引/类型/1
{
json串
}
id:学生编号
studentNo:学号
name:姓名
major:专业
gpa:成绩平均绩点
yearOfBorn:出生年
classOf:年届
interest:兴趣爱好

POST /_bulk{
“create”:{"_index":“def”,"_type":“user”,"_id":“2”}}{“id”: 2, “studentNo”: “TH-CHEM-2016-C001”, “name”: “Jonh Smith”, “major”:“Chemistry”, “gpa”: 4.8, “yearOfBorn”: 2000, “classOf”: 2016, “interest”: “soccer, basketball, badminton, chess”}{“create”:{"_index":“def”,"_type":“user”,"_id":“3”}}{“id”: 3, “studentNo”: “TH-PHY-2018-C001”, “name”: “Isaac Newton”, “major”:“Physics”, “gpa”: 3.6, “yearOfBorn”: 2001, “classOf”: 2018, “interest”: “novel, soccer, cooking”}
{“create”:{"_index":“def”,"_type":“user”,"_id":“4”}}{“id”: 4, “studentNo”: “TH-PHY-2018-C001”, “name”: “Isaac Newton”, “major”:“Physics”, “gpa”: 2.6, “yearOfBorn”: 2002, “classOf”: 2018, “interest”: “novel, soccer, cooking”}
{“create”:{"_index":“def”,"_type":“user”,"_id":“5”}}{“id”: 5, “studentNo”: “TH-PHY-2018-C001”, “name”: “Isaac Newton”, “major”:“Physics”, “gpa”: 1.6, “yearOfBorn”: 2003, “classOf”: 2018, “interest”: “novel, soccer, cooking”}{“create”:{"_index":“def”,"_type":“user”,"_id":“6”}}{“id”: 6, “studentNo”: “TH-PHY-2018-C001”, “name”: “Isaac Newton”, “major”:“Physics”, “gpa”: 0.6, “yearOfBorn”: 2004, “classOf”: 2018, “interest”: “novel, soccer, cooking”}

二、update改变

POST /索引/类型/1/_update
{
“doc”:{
列名:值//精准修改某个列
}
}

GET def/user/4/_update
{
    "doc":{
        "name":"Da smith"
    }
}

es中类似于FIND_IN_SET es的index_数据_07

三、delete 删除

DELETE def/user/1 删除内容第一条的内容
ps:正常都是删除某一条的数据
DELETE def 删除索引

四、get 查询

GET /索引/类型/_search 查询所有

get def/user/_search

es中类似于FIND_IN_SET es的index_数据_08


GET /索引/类型/?_source=字段名:desc

还可用来排序

GET def/user/_search?sort=classOf:desc 
ps:按学籍降序排列

es中类似于FIND_IN_SET es的index_数据_09


GET /索引/类型/_search

{“query”:{match_all}:{}}

ps:返回所有文档

GET /索引/类型/_search
{
“query”:{
“match”{json串}
}
}

分组查询

GET /def/user/_search
{
  "query": {
    "match": {
      "name": "smith"
    }
  }
}

es中类似于FIND_IN_SET es的index_分页_10

条件查询查询指定数据

ET /def/user/1

es中类似于FIND_IN_SET es的index_bc_11

match_phrase:短语匹配查询

#分词结果为smith,如果name字段值中依次包含所有分词,那么返回该文档
#忽略大小写
GET def/user/_search
{
    "query": {
        "match_phrase": {
          "name":"da"
        }
    }
}

es中类似于FIND_IN_SET es的index_elasticsearch_12

multi_match:多字段匹配查询

查询约翰喜欢篮球(模糊查询)

es中类似于FIND_IN_SET es的index_数据_13

range:范围查询

#gte大于等于  gt大于
#lte小于等于  lt小于
GET def/user/_search
{
  "query": {
    "range": {
      "gpa": {
        "gt": 0.6,
        "lte": 5.0
      }
    }
  }
}

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET_14

布尔查询

查询喜欢“cooking”且不在1995-2000间出生的学生

#must 必须是
#must_not 不能是
GET def/user/_search
{
    "query": {
      "bool": {
        "must": {
            "match": { "interest": "cooking"} },
        "must_not": {
            "range": { "yearOfBorn": { "lt": 1995, "gt": 2000 }}}
      }
    }
}

es中类似于FIND_IN_SET es的index_数据_15


姓名为“john”

在2016年后入学

爱好“basketball"

GET def/user/_search
{
    "query": {
      "bool": {
        "must": [{
            "match": { "name": "jonh" }},
          {"range": { "classOf": { "gte": 2016 } }},
          {"match": { "interest": "basketball" }}
          ]
        }
      }
}

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET_16

GET_mget查询(查询一个或多个

)
 1、不同节点的查询
 GET /_mget
 {
 “docs”:[
 {
 “_index”:“abc”,
 “_type”:“article”,
 “_id”:“4”
 },
 {
 “_index”:“abc”,
 “_type”:“article”,
 “_id”:“5”
 },
 {
 “_index”:“logstash-2020.06.19”,
 “_type”:“doc”,
 “_id”:“9b7AynIBT_TKQdkeS4qX”
 }
 ]
 }
 2、相同节点查询
 方式一:
 GET /_mget
 {
 “docs”:[
 {
 “_index”:“abc”,
 “_type”:“article”,
 “_id”:“4”
 },
 {
 “_index”:“abc”,
 “_type”:“article”,
 “_id”:“5”
 },
 ]
 }方式二:
 GET abc/article/_mget
 {
 “docs”:[
 {
 “_id”:“4”
 },
 {
 “_id”:“5”
 }
 ]
 }方式三:
 GET abc/article/_mget
 {
 “_id”:[“1”,“2”]
 }

五、post 查询/改变

六、其他

分词器

#stardard 默认字节分词
POST _analyze
{
  "analyzer": "standard",
  "text":["我要回家","我y要回家"]
}

es中类似于FIND_IN_SET es的index_bc_17

#whitespace 根据空格分词
POST _analyze
{
  "analyzer": "whitespace",
  "text":["我要回家","我y要 回家"]
}

es中类似于FIND_IN_SET es的index_分页_18

分页

from+size浅分页

#分页 显3个从0开始到3
GET def/user/_search
{
  "query": {
    "match_all": {}
  }
  , "size": 3
  , "from": 0
}

scroll深分页

#保存结果快照
GET def/user/_search?scroll=3m
{
  "query": {
    "match_all": {}
  }
  , "size": 2
  , "from": 0
}

es中类似于FIND_IN_SET es的index_es中类似于FIND_IN_SET_19

#调用 注意时效性
GET def/user/_search
{
    "query": {
      "bool": {
        "must": [{
            "match": { "name": "jonh" }},
          {"range": { "classOf": { "gte": 2016 } }},
          {"match": { "interest": "basketball" }}
          ]
        }
      }
}