ElasticSearch的多条件组合操作

本文介绍了ElasticSearch的基本概念及使用方法,包括根据ID查询、多条件查询、批量操作、更新与删除等功能,并提供了实际代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ElasticSearch的基本使用

介绍

官方概述:ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。

基本使用

关于客户端创建方式,Index 请看官方API文档,方式都差不多,这里不多说

1)根据 _id 查询
GetResponse response = client.prepareGet("twitter", "tweet", "1")
        .setOperationThreaded(false)
        .get();

2)多条件查询:
SearchResponse searchResponse =  client.prepareSearch(INDEX_ST_CUSTOMER_CONTACT_SDR)
                .setTypes(INDEX_ST_CUSTOMER_CONTACT_SDR.toUpperCase())
                .setQuery(
                        QueryBuilders.boolQuery()
                                .must(QueryBuilders.termsQuery("key1", value1))
                                .must(QueryBuilders.termQuery("key2", value2))
                                .must(QueryBuilders.termQuery("key3",value3))
                                .must(QueryBuilders.rangeQuery("TIME")
                                        .from(TimeUtils.formatTime((System.currentTimeMillis()-30*6*24*60*60*1000L), "yyyyMMddHHmmss"))
                                        .to(TimeUtils.formatTime(System.currentTimeMillis(), "yyyyMMddHHmmss")))
                )
                .setFrom(0)
                .setSize(1000)
                .get();

还有批量这里可以自行百度,很多资源

更新
client.prepareUpdate("ttl", "doc", "1")
        .setDoc(jsonBuilder()   //合并到现有文档
            .startObject()
                .field("gender", "male")
            .endObject())
        .get();

--
在不知道 _id 的情况下,我这里暂时用的是先查,然后进行更新的方法,有简单的方法可以留下你的脚本,
在上面条件查询之后
SearchHit[] hits = searchContactByCustomerId(orgName,suborgId,oldId,client);
            BulkRequestBuilder bulkRequest = client.prepareBulk();
            for (SearchHit hit : hits) {
                bulkRequest
                        .add(client.prepareUpdate("_index", "_type", hit.getId()) // 循环拿到条件查询之后的_id
                                .setDoc(
                                        XContentFactory.jsonBuilder().startObject().
                                                field("CUSTOMER_ID", newId)
                                                .endObject()
                                )
                        );
            }
            BulkResponse bulkResponse = bulkRequest.get();
            ......
删除
基本删除
DeleteResponse response = client.prepareDelete("twitter", "tweet", "1")
        .setOperationThreaded(false)
        .get();

多条件组合删除
BulkByScrollResponse response =
    DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
        .filter(QueryBuilders.matchQuery("xx", "xx")) //查询条件
        .filter(QueryBuilders.matchQuery("xx", "xx")) 
        .filter(QueryBuilders.matchQuery("xx", "xx")) 
        ...
        .source("persons") //index(索引名)
        .get();  //执行

结论

这几个是我用得多的,更新方法我之前找了很多都是根据已知“_id”来进行操作的,这里放出在不知道的情况下,先条件查询然后进行更新(当然,有简单的方法,但是没成功,希望大神指教),几个关于多条件进行组合的,ElasticSearch我用的不多,这几个是用了之后的总结,谢谢指教~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值