GET /bank/_search
{
"query": { "match": { "address": "mill lane" } }
}
GET /bank/_search
{
"query": {
"match": {
"address": "mill lane"
}
},
"size": 5
}
GET /bank/_search
{
"query": {
"match_phrase": {
"address": "mill lane"
}
}
}
GET /bank/_search
{
"query": {
"multi_match": {
"query": "mill",
"fields": ["state","address"]
}
}
}
GET /bank/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": "40"
}
}
],
"must_not": [
{
"match": {
"state": "ID"
}
}
],
"should": [
{
"match": {
"lastname": "Wallace"
}
}
]
}
}
}
GET /bank/_search
{
"query": {
"bool": {
"must": [
{"match_all": {}}
],
"filter": {
"range": {
"balance": {
"gte": 20000,
"lte": 30000
}
}
}
}
}
}
GET /bank/_search
{
"query": {
"match": {
"address": "mill"
}
},
"aggs": {
"ageAGG": {
"terms": {
"field": "age"
}
},
"aggAVG":{
"avg": {
"field": "age"
}
},
"balance":{
"avg": {
"field": "balance"
}
}
},
"size": 0
}
PUT /my_index
{
"mappings": {
"properties": {
"age":{
"type": "integer"
},
"email":{
"type": "keyword"
},
"name":{
"type": "text"
}
}
}
}
PUT /my_index/_mapping
{
"properties":{
"empId":{
"type":"keyword",
"index":false
}
}
}
GET /my_index/_search
POST /my_index/_doc
{
"empId":"2",
"name":"edg",
"email":"s11EDG",
"age":11
}
PUT /my_index/_doc/SjlRwHwBAoX3eHnJSU9q?pretty
{
"name":"啥",
"age":12
}
DELETE /my_index/_doc/SjlRwHwBAoX3eHnJSU9q
PUT /my_index1
{
"mappings": {
"properties": {
"age": {
"type": "integer"
},
"email": {
"type": "text"
},
"name": {
"type": "text"
}
}
}
}
POST _reindex
{
"source": {
"index": "my_index"
},
"dest": {
"index": "my_index1"
}
}
POST _analyze
{
"analyzer": "standard",
"text": "我是中国人"
}
POST _analyze
{
"analyzer": "ik_max_word",
"text": "我是中国人"
}
POST _analyze
{
"analyzer": "ik_smart",
"text": "我是中国人"
}
package com.ghl.es;
import com.alibaba.fastjson.JSON;
import com.ghl.es.config.ESConfig;
import com.ghl.es.config.EsConstant;
import com.ghl.es.model.Account;
import org.apache.lucene.util.ArrayUtil;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.ElasticsearchClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.ToXContent;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.*;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.index.reindex.UpdateByQueryRequest;
import org.elasticsearch.script.Script;
import org.elasticsearch.script.ScriptType;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.ParsedAggregation;
import org.elasticsearch.search.aggregations.bucket.nested.ParsedNested;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedLongTerms;
import org.elasticsearch.search.aggregations.bucket.terms.ParsedTerms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.AvgAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.ParsedAvg;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
@SpringBootTest
class EsdemoApplicationTests {
@Resource
private RestHighLevelClient client;
@Test
void test1() throws IOException {
SearchRequest request = new SearchRequest();
request.indices(EsConstant.PRODUCT_INDEX);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.termQuery("account_number",9));
builder.size(5);
request.source(builder);
SearchResponse response = client.search(request, ESConfig.COMMON_OPTIONS);
printData(response,Account.class);
printDSL(builder);
}
@Test
void test2() throws IOException {
SearchRequest request = new SearchRequest();
request.indices(EsConstant.PRODUCT_INDEX);
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchQuery("age",40));
boolQuery.mustNot(QueryBuilders.matchQuery("state","ID"));
boolQuery.should(QueryBuilders.matchQuery("lastname","Wallace"));
builder.query(boolQuery);
builder.size(5);
request.source(builder);
SearchResponse response = client.search(request, ESConfig.COMMON_OPTIONS);
printData(response,Account.class);
printDSL(builder);
}
@Test
void test3() throws IOException {
SearchRequest request = new SearchRequest();
request.indices(EsConstant.PRODUCT_INDEX);
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must(QueryBuilders.matchAllQuery());
RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("balance");
rangeQuery.gte(20000);
rangeQuery.lte(30000);
boolQuery.filter(rangeQuery);
builder.query(boolQuery);
builder.size(5);
request.source(builder);
SearchResponse response = client.search(request, ESConfig.COMMON_OPTIONS);
printData(response,Account.class);
printDSL(builder);
}
@Test
void test4() throws IOException{
SearchRequest request = new SearchRequest();
request.indices(EsConstant.PRODUCT_INDEX);
SearchSourceBuilder builder = new SearchSourceBuilder();
builder.query(QueryBuilders.matchQuery("address","mill"));
builder.size(0);
TermsAggregationBuilder aggAgg = AggregationBuilders.terms("ageAgg").field("age");
aggAgg.subAggregation(AggregationBuilders.terms("numberAgg").field("account_number"));
builder.aggregation(aggAgg);
AvgAggregationBuilder aggAVG = AggregationBuilders.avg("aggAVG").field("age");
builder.aggregation(aggAVG);
AvgAggregationBuilder balanceAgg = AggregationBuilders.avg("balance").field("balance");
builder.aggregation(balanceAgg);
request.source(builder);
SearchResponse response = client.search(request, ESConfig.COMMON_OPTIONS);
printDSL(builder);
printData(response,Account.class);
printAGG(response);
}
@Test
void add() throws IOException {
IndexRequest request = new IndexRequest(EsConstant.PRODUCT_INDEX);
request.id("1003");
Account account = new Account();
account.setAccount_number(1000);
account.setAddress("河南省");
account.setAge(22);
account.setBalance(100000000);
account.setCity("上海市");
account.setEmail("201176170@qq.com");
account.setEmployer("熊二");
account.setFirstname("光头强");
account.setLastname("熊大");
account.setGender("男");
account.setState("OK");
String data = JSON.toJSONString(account);
request.source(data,XContentType.JSON);
IndexResponse index = client.index(request, ESConfig.COMMON_OPTIONS);
System.out.println(request);
}
@Test
void bulkAdd() throws IOException {
BulkRequest bulkRequest = new BulkRequest();
for (int i = 1028; i < 1058; i++) {
IndexRequest request = new IndexRequest(EsConstant.PRODUCT_INDEX);
request.id(String.valueOf(i));
Account account = new Account();
account.setAccount_number(i);
account.setAddress("俄罗斯"+i);
request.source(JSON.toJSONString(account),XContentType.JSON);
bulkRequest.add(request);
}
BulkResponse bulk = client.bulk(bulkRequest, ESConfig.COMMON_OPTIONS);
if (bulk.hasFailures()){
List<String> collect = Arrays.asList(bulk.getItems()).stream().map(item -> item.getId()).collect(Collectors.toList());
System.out.println("插入失败的id");
collect.forEach(System.out::println);
}
}
@Test
void del() throws IOException {
DeleteRequest request = new DeleteRequest();
request.index(EsConstant.PRODUCT_INDEX);
request.id("1002");
DeleteResponse delete = client.delete(request, ESConfig.COMMON_OPTIONS);
System.out.println(delete);
}
@Test
void batchDel1() throws IOException {
DeleteByQueryRequest request = new DeleteByQueryRequest();
request.indices(EsConstant.PRODUCT_INDEX);
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("address","俄罗斯"));
request.setQuery(boolQueryBuilder);
BulkByScrollResponse deleteByQuery = client.deleteByQuery(request, ESConfig.COMMON_OPTIONS);
System.out.println(deleteByQuery);
System.out.println("=");
System.out.println(boolQueryBuilder);
}
@Test
void edit() throws IOException {
UpdateRequest request = new UpdateRequest();
request.index(EsConstant.PRODUCT_INDEX);
request.id("1002");
Account account = new Account();
account.setAddress("河南");
request.doc(JSON.toJSONString(account),XContentType.JSON);
UpdateResponse update = client.update(request, ESConfig.COMMON_OPTIONS);
System.out.println(update);
}
@Test
void batchEdit() throws IOException {
UpdateByQueryRequest request = new UpdateByQueryRequest(EsConstant.PRODUCT_INDEX);
request.setQuery(QueryBuilders.matchQuery("address", "河南"));
request.setScript(
new Script(
ScriptType.INLINE, "painless",
"if (ctx._source.address == '河南') {ctx._source.address == '开封'}",
Collections.emptyMap()));
client.updateByQuery(request,ESConfig.COMMON_OPTIONS);
}
private <T> void printData(SearchResponse esResponse, Class<T> classType){
System.out.println("===========================================查询结果=======================================");
SearchHit[] hits1 = esResponse.getHits().getHits();
if ((hits1 == null || hits1.length == 0) || classType == null){
System.out.println("没有查询到数据");
return;
}
SearchHit[] hits = esResponse.getHits().getHits();
List<T> modelList = null;
if (hits != null && hits.length > 0){
modelList = new ArrayList<>();
for (SearchHit hit : hits) {
String sourceAsString = hit.getSourceAsString();
T t = JSON.parseObject(sourceAsString, classType);
modelList.add(t);
}
}
modelList.forEach(System.out::println);
}
private void printDSL(SearchSourceBuilder dsl){
System.out.println("===========================================查询DSL=======================================");
System.out.println(dsl.toString());
}
private void printAGG(SearchResponse response){
System.out.println("===========================================解析聚合=======================================");
Aggregations aggregations = response.getAggregations();
Map<String, Aggregation> asMap = aggregations.getAsMap();
for (Map.Entry<String, Aggregation> map : asMap.entrySet()) {
recursionAgg(map.getKey(),map.getValue());
}
}
private void recursionAgg(String name,Aggregation agg) {
System.out.println("====================================="+name+"聚合==============================");
String type = agg.getType();
if ("avg".equalsIgnoreCase(type)){
ParsedAvg parseAgg = (ParsedAvg) agg;
double value = parseAgg.getValue();
System.out.println(value);
}else if ("lterms".equalsIgnoreCase(type)){
ParsedLongTerms parseAgg = (ParsedLongTerms) agg;
List<? extends Terms.Bucket> buckets = parseAgg.getBuckets();
for (Terms.Bucket bucket : buckets) {
Aggregations aggregations = bucket.getAggregations();
if (aggregations != null){
System.out.println("----"+name+"子聚合");
Map<String, Aggregation> subAggs = aggregations.asMap();
for (Map.Entry<String, Aggregation> sub : subAggs.entrySet()) {
recursionAgg(sub.getKey(),sub.getValue());
}
}
System.out.println(bucket.getKeyAsString());
System.out.println(bucket.getDocCount());
}
}else {
System.out.println("...");
}
}
}