当前位置:   article > 正文

Elasticsearch系列-数据的增删改查_elasticsearchresttemplate 修改数据java

elasticsearchresttemplate 修改数据java

前言

目标通过分词能达到预期的数据检索结果,并能完成数据的统计分析
ES版本7.10.2
客户端语言DSL、Java
针对Java 使用的是spring-data-elasticsearch-4.2.x框架
elasticsearch各版本对应的spring相关组件的版本号

基础的增删改查

索引(添加)数据

  • 添加单条数据
POST hotel/_doc/001
{
  "title": "喜来乐酒店",
  "city": "苏州",
  "price": 578.23
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 批量添加数据

基本查询

查询这块是最复杂的,也是难点所在

  • 按照id查询数据
GET hotel/_doc/001
  • 1
  • term查询
    全词匹配,一般用于keyword、数字类型的字段
GET hotel/_search
{
  "query": {
    "term": {
      "city": "苏州"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • match查询
    模糊匹配,并对结果进行打分
GET hotel/_search
{
  "query": {
    "match": {
      "title": "来乐"
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

更新数据

ES底层是无法完成部分字段更新功能的,只能对整个文档进行更新,即使ES提供了部分字段更新的api,也是内部先把整个文档获取出来,然后再进行更新,每次更新后,对应的版本号也会自动增加.

  • 根据id进行更新
POST /hotel/_update/001
{
  "doc": {
    "title" : "喜来乐酒店",
    "city" : "南京",
    "price" : 578.23
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • update_by_query
    更新符合指定条件的文档,类似SQL中的 update Table set xx=‘’,bb=‘’ where q1 and q2.
POST /hotel/_update_by_query
{
  "query": {
    "term": {
      "city": {
        "value": "盐城"
      }
    }
  },
  "script": {
    "source": "ctx._source['city']='苏州'",
    "lang": "painless"
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

JAVA 实现方式

String script = "ctx._source['city']=params['newCityName']";
Map<String, Object> params = Collections.singletonMap("newCityName", "苏州");
UpdateByQueryRequest request = new UpdateByQueryRequest("hotel") //
        .setQuery(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("city", "盐城"))) //
        .setAbortOnVersionConflict(true) //
        .setRefresh(true) //
        .setScript(new Script(ScriptType.INLINE, "painless", script, params)); //

elasticsearchRestTemplate.execute(client -> client.updateByQuery(request, RequestOptions.DEFAULT));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

删除数据

  • 根据id删除数据
DELETE /hotel/_doc/001
  • 1
  • delete by query
    根据指定的条件删除数据
POST /hotel/_delete_by_query
{
  "query": {
    "term": {
      "city": {
        "value": "盐城"
      }
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

JAVA 实现方式

NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("city", "盐城"))
                .build();
elasticsearchRestTemplate.delete(searchQuery, Hotel.class);
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/68837
推荐阅读
相关标签
  

闽ICP备14008679号