文章目录
- 前言
- elasticsearch-如何给文档新增/更新的字段
- 1. 如何给某些文档新增/更新的字段
- 2. 给所有文档添加/更新一个新的字段
- 3. 测试
前言
如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。
而且听说点赞的人每天的运气都不会太差,实在白嫖的话,那欢迎常来啊!!!
elasticsearch-如何给文档新增/更新的字段
1. 如何给某些文档新增/更新的字段
POST /blog_new/_update_by_query
{
"script": {
"source": "ctx._source.double_yzy_flag = 'Y'",
"lang": "painless"
},
"query": {
"bool": {
"filter": [
{
"term": {
"author": {
"value": "yangzhenyu",
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": "1.0"
}
}
}
ctx._source:这是 Elasticsearch 中用于修改文档字段的方式。通过 ctx._source 可以访问和修改文档中的字段。
效果:执行语句时,如果文档中没有 double_yzy_flag 字段,它会自动新增并赋值为 ‘Y’。如果字段已经存在,则会更新其值为 ‘Y’。
注意的是
- 当你添加一个新的字段(没有预定义映射)时,Elasticsearch 会根据字段的内容推断类型。对于字符串值(如 ‘Y’),Elasticsearch 默认将其类型设置为 keyword,因为 keyword 类型是用于存储精确值、不可分词的字符串数据。keyword 类型适合用于标识符、标签、分类、状态等字段。
- keyword 类型的特点:
- 不分词:keyword 类型字段会原样存储文本数据,不会对其进行分词(如 analyze)。
- 适合精确匹配:keyword 类型适用于精确匹配查询,如 term 查询,因为它存储的内容没有经过分词,查询时直接使用原值进行匹配。
2. 给所有文档添加/更新一个新的字段
POST /blog_new/_update_by_query
{
"script": {
"source": "ctx._source.double_xxx = 'N'",
"lang": "painless"
},
"query": {
"match_all": {}
}
}
3. 测试
1、查询该索引文档总数
GET /blog_new/_search
{
"size": 0
}
总数为:2433
2、查询double_yzy_flag=Y的数量
这是上次执行更新新增语句update的数量,总共有605。
下边是查询double_yzy_flag=Y的数量:
GET /blog_new/_search
{
"size": 0,
"query": {
"bool": {
"filter": [
{
"term": {
"double_yzy_flag.keyword": {
"value": "Y",
"boost": 1.0
}
}
}
],
"adjust_pure_negative": true,
"boost": "1.0"
}
},
"sort": [
{
"publish_date": {
"order": "asc"
}
}
]
}
下边是查询非double_yzy_flag=Y的数量:
预测数量应该是总数-double_yzy_flag=Y的数量=2433 - 605 = 1828
GET /blog_new/_search
{
"size": 0,
"query": {
"bool": {
"must_not": [
{
"match_phrase": {
"double_yzy_flag.keyword": {
"query": "Y",
"slop": 0,
"zero_terms_query": "NONE",
"boost": 1
}
}
}
],
"adjust_pure_negative": true,
"boost": "1.0"
}
},
"sort": [
{
"publish_date": {
"order": "asc"
}
}
]
}
测试正确!!