Elasticsearch系列-数据的增删改查

前言

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

基础的增删改查

索引(添加)数据

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

基本查询

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

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

更新数据

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

  • 根据id进行更新
POST /hotel/_update/001
{
  "doc": {
    "title" : "喜来乐酒店",
    "city" : "南京",
    "price" : 578.23
  }
}
  • 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"
  }
}

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));

删除数据

  • 根据id删除数据
DELETE /hotel/_doc/001
  • delete by query
    根据指定的条件删除数据
POST /hotel/_delete_by_query
{
  "query": {
    "term": {
      "city": {
        "value": "盐城"
      }
    }
  }
}

JAVA 实现方式

NativeSearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(QueryBuilders.termQuery("city", "盐城"))
                .build();
elasticsearchRestTemplate.delete(searchQuery, Hotel.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值