我只是ElasticSearch常用API的搬运工

348 阅读1分钟

整理了开发中常用的几个API,方便复制粘贴,主要是懒得查。

索引API

Rest API官网文档:
www.elastic.co/guide/en/el…

1.创建索引

PUT /my-index

2.删除索引

DELETE /my-index

数据API

Rest API官网文档:
www.elastic.co/guide/en/el…

Java官网文档:
www.elastic.co/guide/en/el…

1.新增数据

POST my-index/_doc
{
   "name": "Will_Liao"
}
User user = new User();
user.setId(1);
user.setName("Will_Liao")

IndexRequest request = new IndexRequest(“my-index”);
request.id(user.getId());
request.type("doc");
String jsonString = JSON.toJSONString(user);
request.source(jsonString, XContentType.JSON);
request.opType(DocWriteRequest.OpType.CREATE);
try {
    IndexResponse indexResponse = esClient.index(request, RequestOptions.DEFAULT);
} catch (Exception e) {
  
}

2.删除数据

DELETE my-index/_doc/id 
{
} 
DeleteRequest deleteRequest = new DeleteRequest("my-index", "doc", user.getId());
try {
DeleteResponse deleteResponse = esClient.delete(
        request, RequestOptions.DEFAULT);
} catch (Exception e) {
}

3.查询数据

POST my-index/_search
{
    "bool": {
        "must": [
           {
             "match": {
               "name": "Will_Liao"
           }
           }
        ]
    }
}
SearchRequest searchRequest = new SearchRequest("my-index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
queryBuilder.must(QueryBuilders.matchQuery("name", "Will_Liao"));
searchSourceBuilder.size(100);
searchSourceBuilder.timeout(TimeValue.timeValueMillis(500));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT);
SearchHits hits = searchResponse.getHits();
if (hits == null) {
SearchHit[] searchHits = hits.getHits();
if (searchHits != null && searchHits.length > 0) {
    for (SearchHit hit : searchHits) {
        String sourceString = hit.getSourceAsString();
        User user = JSON.parseObject(sourceString, User.class);
        ...
    }
}
}

4.修改数据

POST my-index/_update/id
{
   "name": "Will_Liao"
}
Map<String, Object> jsonMap = new HashMap<>();
jsonMap.put("name", "Will_Liao");
UpdateRequest request = new UpdateRequest("my-index", "doc", user.getId())
        .doc(jsonMap);
request.setRefreshPolicy(WriteRequest.RefreshPolicy.NONE);
request.retryOnConflict(3);

try {
    UpdateResponse updateResponse = esClient.update(request, RequestOptions.DEFAULT);
} catch (Exception e) {
}

5.条件更新

POST my-index/_update_by_query
{
  "query": {
    "bool": {
        "must": [
           {
             "match": {
               "name": "Will_Liao"
           }
           }
        ]
    }
  },"script": {
       "source":"ctx._source['name']=test;"
  }
}
UpdateByQueryRequest request = new UpdateByQueryRequest("my-index");
BoolQueryBuilder queryBuilder = boolQuery();
queryBuilder.must(QueryBuilders.matchQuery("name", "Will_Liao"));
request.setScript(new Script("ctx._source['name']=test"));
request.setQuery(queryBuilder);
request.setRefresh(true);
try {
    BulkByScrollResponse bulkResponse =
            esClient.updateByQuery(request, RequestOptions.DEFAULT);
    long updatedDocs = bulkResponse.getUpdated();
} catch (Exception e) {
}

6.条件删除

POST my-index/_delete_by_query
  "query": {
    "bool": {
        "must": [
           {
             "match": {
               "name": "Will_Liao"
           }
           }
        ]
    }
  }
}
DeleteByQueryRequest request = new DeleteByQueryRequest("my-index");
BoolQueryBuilder queryBuilder = boolQuery();
queryBuilder.must(QueryBuilders.matchQuery("name", "Will_Liao"));
request.setQuery(queryBuilder);
request.setRefresh(true);
try {
    BulkByScrollResponse bulkResponse =
            esClient.deleteByQuery(request, RequestOptions.DEFAULT);
    long deletedDocs = bulkResponse.getDeleted();
} catch (Exception e) {
}

7.游标
Rest API官网文档:
www.elastic.co/guide/en/el…
Java官网文档:
www.elastic.co/guide/en/el…

Scroll scroll = new Scroll(TimeValue.timeValueMinutes(1L));
SearchRequest searchRequest = new SearchRequest("my-index");
searchRequest.scroll(scroll);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
if (user.getName() != null) {
    queryBuilder.must(QueryBuilders.matchQuery("name", user.getName()));
}
searchSourceBuilder.size(1000);
searchSourceBuilder.query(boolQueryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT);
if(searchResponse != null) {
    String scrollId = searchResponse.getScrollId();
    SearchHit[] searchHits = searchResponse.getHits().getHits();
    while (searchHits != null && searchHits.length > 0) {
        for (SearchHit hit : searchHits) {
            String sourceString = hit.getSourceAsString();
            User user = JSON.parseObject(sourceString, User.class);
            ...
        }
        SearchScrollRequest scrollRequest = new SearchScrollRequest(scrollId);
        scrollRequest.scroll(scroll);
        searchResponse = esClient.scroll(scrollRequest, RequestOptions.DEFAULT);
        scrollId = searchResponse.getScrollId();
        searchHits = searchResponse.getHits().getHits();
    }
    ClearScrollRequest clearScrollRequest = new ClearScrollRequest();
    clearScrollRequest.addScrollId(scrollId);
    videoEsClient.clearScroll(clearScrollRequest, RequestOptions.DEFAULT);
}

聚合API

1.Rest API官网文档:
www.elastic.co/guide/en/el…
Java官网文档:
www.elastic.co/guide/en/el…

1.分组

POST my-index/_search
{
  "query": {
    "match": {
      "match_all": {} 
    }
  },"aggs": {
    "by_name": {
      "terms": {
        "field": "name"
      }
    }
  }
}
SearchRequest searchRequest = new SearchRequest("my-index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
searchSourceBuilder.aggregation(AggregationBuilders.terms("by_name").field("name"));
searchSourceBuilder.size(0);
searchSourceBuilder.timeout(TimeValue.timeValueMillis(500));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT);
if (searchResponse != null) {
Terms byNameAggregation = searchResponse.getAggregations().get("by_name");
for (Terms.Bucket buck : byNameAggregation.getBuckets()) {
    String key = buck.getKey();
    long count = buck.getDocCount();
}
}

2.统计

POST my-index/_search
{
  "query": {
    "match": {
      "match_all": {} 
    }
  },"aggs": {
    "max_age": {
      "max": {
        "field": "age"
      }
    }
  }
}
SearchRequest searchRequest = new SearchRequest("my-index");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
MaxAggregationBuilder max_age = AggregationBuilders.max("max_age").field("age").missing(0);
searchSourceBuilder.aggregation(max_age);
searchSourceBuilder.size(0);
searchSourceBuilder.timeout(TimeValue.timeValueMillis(500));
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = esClient.search(searchRequest, RequestOptions.DEFAULT);
if (searchResponse != null) {
Max max_age_term = searchResponse.getAggregations().get("max_age");
double maxAge = max_age_term.getValue();
}