怎么给新网站做推广,网站建设的规划书,wordpress crm 插件,网站建设制作经验足前言
本文记录 ES 的一些基本操作#xff0c;就是对官方文档的一些整理#xff0c;按自己的习惯重新排版#xff0c;凑合着看。官方的更详细#xff0c;建议看官方的。
下文以 books 为索引名举例。
新增
添加单个文档 (没有索引会自动创建)
POST books/_doc
{n…前言
本文记录 ES 的一些基本操作就是对官方文档的一些整理按自己的习惯重新排版凑合着看。官方的更详细建议看官方的。
下文以 books 为索引名举例。
新增
添加单个文档 (没有索引会自动创建)
POST books/_doc
{name: Snow Crash, author: Neal Stephenson, release_date: 1992-06-01, age: 18}不指定 id会随机生成如果需要指定 id使用 POST books/_doc/id
还可以使用 put 的方式新增例入 POST books/_doc/id这种方式必须带 id否则会报错
以上两种方式如果带上了 id就是不存在就插入存在旧更新
更新
总结 有三种方式
POST 更新 如果 URL 带 _update更新前会对比新旧数据如果新旧数据完全相同将不会进行任何操作 noop不会影响序列号、版本号信息。如果 URI 不带 _update不会检查原数据都会显示 updated PUT 更新 路径没法带 _update每次都会更新显示 updated
例如有原数据
{name: zhangsan,age: 18
}POST 访问路径带_update
需要在参数外套一层 doc这种方式不影响其他字段
POST /books/_update/1
{doc: {name: lisi}
}// 执行之后原数据变成
{name: lisi,age: 18
}POST 访问路径不带_update
和带 id 新增的语法是一样的不存在就是插入存在就是更新。这种方式会清空其他字段
POST /books/_doc/1
{name: lisi
}// 执行之后原数据变成
{name: lisi
}PUT 访问路径不能带_update
效果同第 2 点
PUT /books/_doc/1
{name: lisi
}删除
DELETE /books/_doc/1POST /books/_delete_by_query
{查询条件...}搜索
官方实例数据account. json
使用 [Bulk API](Bulk API | Elasticsearch Guide [8.12] | Elastic) 来批量插入没有安装 kibana 也可以用 postman 导入 如果插入记录搜索不到可能是索引未来得及刷新可以手动触发
POST /article/_refresh
根据 id 获取文档
// 获取带元数据的
GET /bank/_doc/1
// 获取不带元数据的
GET /bank/_source/1
// 判断文档是否存在
HEAD /bank/_doc/1使用 HEAD 只会返回 {} 空对象可以根据请求是否 404 判断文档是否存在
_search 命令搜索
注意如果你用 es-client 连接的 es请将 GET 换成 POST否则查询无效
原因是 GET 请求没有带上 body 参数
默认只会返回最先匹配到的 10 条文档
GET /bank/_search返回结果
took检索花费时间单位毫秒从节点收到查询到将数据返回客户端之前
timed_out 布尔类型检索是否超时
hits 命中的记录
total.value 总记录的数量
hits.total 所有命中的记录
搜索全部
GET /bank/_search
{query: {match_all: {}}
}排序
Sort search results | Elasticsearch Guide [8.12] | Elastic
GET /bank/_search
{sort: [{account_number: desc},{balance: { // 两种写法都行order: asc}}]
}sort 排序条件先对 account_number 降序如果 account_number 相同再对 balance 升序
其他排序参数
GET /bank/_search
{sort: [{arr: {order: desc, // 排序mode: min, // 排序模式missing: _last // 缺失值处理}}]
}排序模式
用于对数组或多值字段排序。比如有数据如下
{age: 25,arr: [11000,23234]
}arr 字段就是多值字段。
升序排序的默认排序模式是 min 。默认的降序排序模式是 max
mode说明min选择最低值max选择最高值sum总和作为排序值avg平均值作为排序值median中位数作为排序值
缺失值处理
顾名思义就是排序时没有该字段的文档排前面还是排后面。
missing 值可以设置为 _last 、 _first默认为 _last
分页
Paginate search results | Elasticsearch Guide [8.12] | Elastic
查询方式数据量实时查询排序跳页适用场景formsize 浅分页小支持支持支持实时查询跳页查询scroll 标准方式大不支持支持不支持深度分页有序的批量查询scroll_scan 滚动扫描大不支持不支持不支持深度分页无需的批量查询search_after 分页大支持支持不支持深度分页数据批量导出
from size
默认返回前 10 个结果。可以使用 from 和 size 参数from 定义要跳过的命中数默认 0size 是返回的最大命中数。类比 mysql 中的 limit 0,10
默认情况下无法使用 from 和 size 来翻阅超过 10,000 个匹配项。也就是前 10000 条数据可以用这种方式分页。如果数据太多请使用search_after
GET /bank/_search
{from: 0,size: 10
}search_after
注意搜索必须指定排序字段否则获取不到 search_after 需要的参数。
使用步骤 一、第一页不需要使用 search_after
// 查询
GET /bank/_search
{sort: [ // 必须指定排序字段account_number,age]
}// 响应
{...hits: {...hits: [{...sort: [ 0, 29]}]}
}第二页的搜索就带上前一页的 hits.sort 中的参数
GET /bank/_search
{search_after: [0, 29],sort: [ // 必须指定排序字段account_number,age]
}TODO PIT
A 查询数据B 同时在插入数据为了解决 A 两次查询的数据不一致可以使用 point int time
检索选定的字段
Retrieve selected fields from a search | Elasticsearch Guide [8.12] | Elastic
关键词 fields可以指定返回字段和格式
搜索 API
Query DSL | Elasticsearch Guide [8.12] | Elastic
Search API | Elasticsearch Guide [8.12] | Elastic
query 和 filter
query 就是普通的查询会计算分数。
filter 不会计算分数es 还会自动缓存常用的过滤器提高性能
说明Query and filter context | Elasticsearch Guide [8.12] | Elastic
用法Boolean query | Elasticsearch Guide [8.12] | Elastic
复合查询
Compound queries | Elasticsearch Guide [8.12] | Elastic
全文查询
intervals 文本灵活查询
Intervals query | Elasticsearch Guide [8.12] | Elastic
允许用户精确控制查询词在文档中出现的先后关系实现了对 terms 顺序、terms 之间的距离以及它们之间的包含关系的灵活控制
match 模糊查询
Match query | Elasticsearch Guide [8.12] | Elastic
对基本类型是精确匹配比如 long、日期等。对字符串是模糊查询对查询的值分词对分词的结果一一进入倒排索引去匹配
GET /ft/_search
{query: {match : {my_text:{query: my when,operator: or}}}
}解释查找 my_text 字段中包含 my 或者 when 的文档。
query 需要查询的内容
operator默认是 or如果改成 and就需要 my_text 中同时包含 when 和 my
analyzer分词器默认使用字段的分词器
prefix 前缀查询
GET /ft/_search
{query: {prefix: {my_text: {value: favo}}}
}匹配 my_text 中以 favo 开头的注意是不能分词的也就是 my fa 查不到 cold my favourite food但是用 favo 可以找到
match_bool_prefix 分词前缀查询
prefix 不能分词那么 match_bool_prefix 就来了
GET /ft/_search
{query: {match_bool_prefix: {my_text: {query: quick brown f}}}
}解释先分词最后一个词按前缀处理前面的词语直接匹配只要有一个命中就可以
匹配 quick brown fox 和 two quick brown ferrets 和 the fox is quick and brown
match_phrase 短语匹配查询
顾名思义match 会分词match_phrase 不会分词
GET /ft/_search
{query: {match_phrase: {my_text: {query: wo shi}}}
}match_phrase_prefix 短语前缀匹配查询
GET /ft/_search
{query: {match_phrase_prefix: {my_text: {query: quick brown f}}}
}与 match_bool_prefix 的区别就是不分词匹配 quick brown fox 和two quick brown ferrets不匹配 the fox is quick and brown
combined_fields 组合多字段查询
Combined fields | Elasticsearch Guide [8.12] | Elastic
这个有点不太理解。
GET /ft/_search
{query: {combined_fields: {query: ren shui,fields: [title,my_text],operator: and}}
}解释效果类似于将 title 和 my_text 两个字段合并成一个再执行查询
注意我把 operator 改成 and 了但是只要 title 和 my_text 组合起来包含了 ren 和 shui 就能命中
multi_match 多字段查询
Multi-match query | Elasticsearch Guide [8.12] | Elastic
在 match 查询的基础上允许多字段查询
GET /ft/_search
{query: {multi_match: {query: ren shui,fields: [title,my_text],operator: and}}
}解释我把 operator 改成了 and那么需要 title 同时包含 ren 和 shui 两个词或者 my_text 同时包含两个词才能命中。和 combined_fields 有区别的。
总结
没啥好总结的吐槽一句官方文档对新手不太友好。新手需要的是快速使用怎么调 api
参考
【ElasticSearch四】PUTPOST更新数据、DELETE删除数据、_bulk批量操作 - musecho - 博客园 (cnblogs.com)