介绍
官方概述: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我用的不多,这几个是用了之后的总结,谢谢指教~