您现在的位置是:知识 >>正文

javaelasticsearch增删改查

知识8人已围观

简介用Java操作Elasticsearch,说白了就是跟一个JSON仓库打交道。你往里面扔文档,它帮你倒腾索引,查起来快得离谱。但增删改查这四件事,写起来各有各的坑,尤其版本一升级,API说变就变,搞得 ...

用Java操作Elasticsearch,删改说白了就是删改跟一个JSON仓库打交道。你往里面扔文档,删改它帮你倒腾索引,删改查起来快得离谱。删改但增删改查这四件事,删改写起来各有各的删改坑,尤其版本一升级,删改API说变就变,删改搞得人头疼。删改

先看新增。删改ES里没有“插入”这个概念,删改只有“索引”。删改你put一条数据进去,删改它要么新建,删改要么覆盖。用Java的High Level REST Client,代码长得像这样:

IndexRequest request = new IndexRequest("users") .id("1001") .source("name", "张三", "age", 28); client.index(request, RequestOptions.DEFAULT);

看着简单吧?但有个细节——如果你不指定id,ES会自己生成一串乱码。生产环境里,我建议永远显式传id,不然以后想删数据,连个索引都找不到。

查询才是真正的大头。ES的查询DSL写起来像搭积木,Java里得用SearchSourceBuilder一层层拼。比如查年龄大于25的用户:

SearchRequest searchRequest = new SearchRequest("users"); SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.rangeQuery("age").gt(25)); searchRequest.source(sourceBuilder); SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

这里有个反直觉的事——ES的“等于”不是用等号,而是用termQuery。而且termQuery默认走精确匹配,分词器一介入,结果可能跟你预想的不一样。上次我排查一个bug,查“北京”这个词,返回了一堆“北京市”的数据,就是因为没用keyword字段。

更新操作更阴险。你以为改一条数据是原地修改?错了,ES内部是“先删后写”。你发一个update请求,它找到旧文档,标记删除,再写新文档。这导致一个后果——频繁更新会让索引体积膨胀。我见过一个日志系统,每秒钟更新上千条数据,一周后磁盘爆了,就是因为没做force merge。

代码层面,更新分两种。一种是用UpdateRequest直接改字段:

UpdateRequest updateRequest = new UpdateRequest("users", "1001") .doc("age", 29); client.update(updateRequest, RequestOptions.DEFAULT);

另一种是用script做条件更新,比如年龄加一岁。后者灵活,但脚本写不好容易出性能问题,尤其是painless里搞循环,CPU直接飙红。

删数据倒是直白。DeleteRequest一扔,完事。但你要想清楚——删的是文档,不是索引。索引还在,mapping还在,磁盘空间不会立刻释放。真要清空数据,用deleteByQuery按条件删,或者干脆删索引重建。我就吃过亏,删了文档以为干净了,结果查询时老命中旧数据,查半天才发现是索引里残留的segment在作怪。

最后说个实战心得。ES的Java客户端,官方推荐用High Level REST Client,但它已经进入维护模式了。新项目直接用Elasticsearch Java Client,就是那个带“_client”后缀的。API风格更现代化,但网上教程少,踩坑只能自己翻源码。你要是维护老项目,别急着迁移,能跑就别动——我见过一次升级,光改连接配置就花了半天,还因为版本兼容问题搞崩了测试环境。

增删改查,听起来简单,但ES的分布式特性决定了它跟传统数据库不一样。你写进去的数据,要等refresh interval才能查到,默认是1秒。改完立刻查,查不到是正常的,别慌。删了数据,磁盘空间不会马上回来,得等segment合并。这些坑,文档里不会写,只有跑过生产环境的人才懂。

Tags:

上一篇:中国国家漏洞库

下一篇:sql注入getshell

相关文章

  • 下列哪一个不属于招聘网站

    知识

    打开电脑,准备投简历。浏览器里躺着十几个标签页,全是招聘网站。忽然想考考你:下列哪一个不属于招聘网站?A. BOSS直聘,B. 前程无忧,C. 智联招聘,D. 美团外卖。 答案太简单了,D。可问题来了 ...

    【知识】

    阅读更多
  • 网安一案双查

    知识

    某电商平台深夜收到网安部门通知,旗下三个业务系统存在高危漏洞,要求立即整改。技术负责人第一反应是“又来了”,第二反应才意识到事情不对——这次通知里多了一句话:将对平台启动“一案双查”。 所谓“一案双 ...

    【知识】

    阅读更多
  • 安全帽使用方法

    知识

    安全帽戴不对,等于没戴。这话听着像废话,但我在工地上见过太多人把帽子往头上一扣就完事——下颚带松垮垮地垂在胸口,帽檐朝后反着戴,甚至有人嫌热把内衬摘了。2019年某市地铁工地事故,工人被坠物砸中头部, ...

    【知识】

    阅读更多


友情链接