1 简单查询
id查询 --掌握
GET crm/employee/id
批量查询 --掌握
GET crm/employee/_mget
{
"ids":[id1,id2]
}
空查询 --掌握
GET _search
分页查询 --掌握
GET _search?size=10&from=0
字符查询 --针对条件比较少 --掌握
GET _search?q=age:12 /[20 TO 50] & from=1&size=1
2 DSL查询
ES提供的标准的查询语言 类似sql
DSL= DSL查询 +DSL过滤
DSL查询和DSL过滤写法很像 DSL主要针对“有多像” 而DSL过滤 相当于 “有"或者"没有”
DSL查询和DSL过滤的区别:(理解)
DSL过滤写法结果是可以被缓存的
DSL查询 类似模糊的查询,可以计算相关性 得分,不缓存
DSL过滤和查询可以共用起来
DSL查询语法:
## 完全匹配
GET crm/employee/_search
{
"query":{
"match": {
"name":"xxx"
}
}
}
## 模糊写法
GET crm/employee/_search
{
"query":{
"wildcard": {
"name":"*xxx*"
}
}
}
DSL过滤语法:精确查询
GET crm/employee/_search
{
"query":{
"bool": {
"must": [
{"match": {"name":"xxx"}}
],
"filter": {
"term": {
"age": "10"
}
}
}
},
"from":0,
"size":3,
"_source":["name","age"],
"sort":[{"age":"desc"}]
}
后面通过java操作
3 分词集群
lucene 分词: 查询查询的值 分开 在到索引库里面查询
郑波 人名和地名 不需要分词 关键字 iphone11 iphone 11
IK:
集成:
(1)下载–解压
(2)放到es安装目录下面的plugins/ik/…
(3)测试
4 字段的映射配置
4.1 默认映射(掌握)
字段的映射配置 指的是 类似给表里面列添加类型
我们在保存值,其他es就已经指定的默认的类型
id:11 —>long
name:“xxx”–>text
4.2 自定义映射(掌握)
## 自定义映射
DELETE shop;
PUT shop;
## 只能对新字段进行映射 如果以前有这个字段有类型,去修改出问题 --转换问题
POST shop/goods/_mapping
{
"goods": {
"properties": {
"price3": {
"type": "double"
},
"name3": {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_smart"
}
}
}
}
最好方案:在创建类型(表)的,就应该指定映射信息,指定你要不要分词
4.3 全局映射
默认映射规则 和动态模版
动态模版: 提示把设定属性的规则设定好,到时候你加入的数据的时候,会自己按照我们设置的规则给你映射
4.4 最佳方案 --理解
优先级
(1)自定义 -->(2)-》全局的 -->(3) 默认的
–最佳实践:设置映射的时候:
(1) 先搞个全局
(2)如果使用自己自定义的
(3)默认
5 集群
5.1 为什么需要集群
处理高并发 大数据 提供性能
解决单点故障
5.2 elasticsearch里面集群
平时启动一个 elasticesearch服务,它 已经处理集群 --它这个只有一台机子
如果要做集群 肯定需要多台机子
1es cluster -->n多个节点(node)–》n(分片shard)
node.master: true node.data: true
master Node:主节点,维护集群信息 索引库操作 具备选举资格
data node:数据节点, 文档crud
client node:只负责处理用户请求
(1)node.master: true node.data: true
这种组合表示这个节点即有成为主节点的资格,又存储数据。
如果某个节点被选举成为了真正的主节点,那么他还要存储数据,这样对于这个节点的压力就比较大了。ElasticSearch默认每个节点都是这样的配置,在测试环境下这样做没问题。实际工作中建议不要这样设置,因为这样相当于主节点和数据节点的角色混合到一块了。
(2)node.master: false node.data: true
这种组合表示这个节点没有成为主节点的资格,也就不参与选举,只会存储数据。
这个节点我们称为data(数据)节点。在集群中需要单独设置几个这样的节点负责存储数据,后期提供存储和查询服务。
(3)node.master: true node.data: false
这种组合表示这个节点不会存储数据,有成为主节点的资格,可以参与选举,有可能成为真正的主节点,这个节点我们称为master节点。
(4)node.master: false node.data: false
这种组合表示这个节点即不会成为主节点,也不会存储数据,这个节点的意义是作为一个client(客户端)节点,主要是针对海量请求的时候可以进行负载均衡。