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字节
一、put 增加 / 更新
//方法一
使用head插件向ES中新增一条数据并进行数据浏览
步骤如上:
若再次点击提交请求,则当前插入的内容会将前一条数据覆盖(更新)
//方法二
通过kibana插入数据
带参数创建索引
PUT demo
{
"settings" : {
"index" : {
"number_of_shards" : 2,//主分页
"number_of_replicas" : 2 //副本
}
}
}
完事运行绿色三角
显示左侧若能正常显示则插入成功
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"
}
}
三、delete 删除
DELETE def/user/1 删除内容第一条的内容
ps:正常都是删除某一条的数据
DELETE def 删除索引
四、get 查询
GET /索引/类型/_search 查询所有
get def/user/_search
GET /索引/类型/?_source=字段名:desc
还可用来排序
GET def/user/_search?sort=classOf:desc
ps:按学籍降序排列
GET /索引/类型/_search
{“query”:{match_all}:{}}
ps:返回所有文档
GET /索引/类型/_search
{
“query”:{
“match”{json串}
}
}
分组查询
GET /def/user/_search
{
"query": {
"match": {
"name": "smith"
}
}
}
条件查询查询指定数据
ET /def/user/1
match_phrase:短语匹配查询
#分词结果为smith,如果name字段值中依次包含所有分词,那么返回该文档
#忽略大小写
GET def/user/_search
{
"query": {
"match_phrase": {
"name":"da"
}
}
}
multi_match:多字段匹配查询
查询约翰喜欢篮球(模糊查询)
range:范围查询
#gte大于等于 gt大于
#lte小于等于 lt小于
GET def/user/_search
{
"query": {
"range": {
"gpa": {
"gt": 0.6,
"lte": 5.0
}
}
}
}
布尔查询
查询喜欢“cooking”且不在1995-2000间出生的学生
#must 必须是
#must_not 不能是
GET def/user/_search
{
"query": {
"bool": {
"must": {
"match": { "interest": "cooking"} },
"must_not": {
"range": { "yearOfBorn": { "lt": 1995, "gt": 2000 }}}
}
}
}
姓名为“john”
在2016年后入学
爱好“basketball"
GET def/user/_search
{
"query": {
"bool": {
"must": [{
"match": { "name": "jonh" }},
{"range": { "classOf": { "gte": 2016 } }},
{"match": { "interest": "basketball" }}
]
}
}
}
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要回家"]
}
#whitespace 根据空格分词
POST _analyze
{
"analyzer": "whitespace",
"text":["我要回家","我y要 回家"]
}
分页
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
}
#调用 注意时效性
GET def/user/_search
{
"query": {
"bool": {
"must": [{
"match": { "name": "jonh" }},
{"range": { "classOf": { "gte": 2016 } }},
{"match": { "interest": "basketball" }}
]
}
}
}