elasticsearch 文档阅读笔记(三)

文档

elasticsearch是通过document的形式存储数据的,个人理解文档就是一条数据一个对象

我们添加索引文档中不仅包含了数据还包含了元数据

比如我们为一个数据添加索引

文档中不仅有json的这些属性还包含红框中的值

检索文档一部分

文档的CRUD

http://127.0.0.1:9200/blogs/product/1 

put 修改或者新增id为1的文档如果不存在新增 如果存在修改(1.找到旧文档json  2.修改他 3.删除旧文档 4.索引新文档)

delete则为删除

elasticsearch乐观锁 

可以发现我们文档元数据有个version字段我们可以利用version字段进行乐观锁

修改失败 我们把版本换成4试试

成功

使用外部版本控制,比如使用我们主数据库表的版本字段添加则使用

http://127.0.0.1:9200/blogs/product/1?version=10&version_type=external

可以看到版本号变成了10  如果再次执行会抱错 因为不大于当前版本号 可以控制并发新增 导致的数据重复

文档局部更新

前面我们看到通过update请求也能实现更新,但是他是覆盖文档,删除原来的文档填入新的文档

post请求:http://127.0.0.1:9200/blogs/product/1/_update

参数

{
   "doc":{
     "productName":"测试修改",
     "videw":1
   }
}

相同字段会被更新 不存在的则添加到文档

使用groovy脚本更新

价格+1

post请求:http://127.0.0.1:9200/blogs/product/1/_update

参数

{
    "script":"ctx._source.price+=1"
}

ctx代表文档_source代表文档中的_source字段,因为我们的数据就是存在文档元数据的_source字段的

{
    "_index": "blogs",
    "_type": "product",
    "_id": "1",
    "_version": 12,
    "_seq_no": 9,
    "_primary_term": 1,
    "found": true,
    "_source": {
        "productName": "测试修改",
        "price": 11,
        "remark": "不错的床垫",
        "tags": [
            "家具",
            "床垫",
            "棉花"
        ],
        "videw": 1
    }
}

往tag中添加一个元素

post请求:http://127.0.0.1:9200/blogs/product/1/_update

参数:

{
    "script":"ctx._source.tag+=newtag",
    "params":{
        "newtag":"测试tag新增"
    }
}

5.*之后会报错 Variable [newtag] is not defined

参数应改为:

{
    "script":"ctx._source.tags.add(params.newtag)",
    "params":{
        "newtag":"测试tag新增"
    }
}

更新不存在的文档

适合计数器

post请求:http://127.0.0.1:9200/blogs/product/2/_update

参数

{
    "script":"ctx._source.count+=1",
    "upsert":{
        "count":"1"
    }
}

第一次请求 将会为文档id为2的创建一个count属性 后续请求+1

更新重试

post请求:http://127.0.0.1:9200/blogs/product/2/_update?retry_on_conflict=5 更新失败后将会重试5此

检索不同index文档

post请求:

参数

{
    "docs":[{
        "_index":"blogs",
        "_type":"product",
        "_id":"1"
    },{
            "_index":"blogs2",
        "_type":"product",
        "_id":"2"
    }]
}

结果

{
    "docs": [
        {
            "_index": "blogs",
            "_type": "product",
            "_id": "1",
            "_version": 13,
            "_seq_no": 10,
            "_primary_term": 1,
            "found": true,
            "_source": {
                "productName": "测试修改",
                "price": 11,
                "remark": "不错的床垫",
                "tags": [
                    "家具",
                    "床垫",
                    "棉花",
                    null
                ],
                "videw": 1
            }
        },
        {
            "_index": "blogs2",
            "_type": "product",
            "_id": "2",
            "_version": 1,
            "_seq_no": 0,
            "_primary_term": 1,
            "found": true,
            "_source": {
                "productName": "法瑞思 天然椰棕床垫棕垫硬床垫定做 薄乳胶棕榈榻榻米床垫定制折叠1.2/1.5/1.8",
                "price": 10,
                "remark": "不错的床垫",
                "tags": [
                    "家具",
                    "床垫",
                    "棉花"
                ]
            }
        }
    ]
}

如果index相同type不同

id和type都相同

猜你喜欢

转载自www.cnblogs.com/LQBlog/p/10427414.html