```shell GET /_cat/nodes // 查看所有结点
GET /_cat/master // 查看主节点
GET /_cat/indices // 查看所有索引
GET /bank/_search // 查找bank下所有数据 ```
添加或更新文档
shell POST /customer/external { "name": "哈哈哈" }
删除索引或文档
shell DELETE customer/external/1 DELETE customer
match_all:查找所有类型
javascript GET /bank/_search { "query": { "match_all": {} }, "from":0, // 从第几条记录开始 "size": 3, // 查出来多少条 "_source": ["firstname","address"] // 筛选某些字段 }
match:会对检索条件进行分词匹配,并按照评分进行排序
java GET /bank/_search { "query": { "match": { "address": "kings mill" // 忽略大小写 } } }
FILED.keyword:address的值必须等于789 Madison Street
java GET bank/_search { "query": { "match": { "address.keyword": "789 Madison Street" } } }
multi_match:city 或 address中包含 kings 或 Ribera,并且在查询过程中,会对于查询条件进行分词
javascript GET /bank/_search { "query": { "multi_match": { "query": "kings Ribera", "fields": ["address","city"] } } }
match_phrase:对检索条件不进行分词,作为完整的一个词进行匹配
javascript GET /bank/_search { "query": { "match_phrase": { "address": "mill road" } } }
bool:组合多个条件
must:gender必须为M,address中必须包含 Kings 或 mill,会进行分词
must_not:age必须不是28
javascript GET bank/_search { "query": { "bool": { "must": [ { "match": { "gender": "M" } }, { "match": { "address": "Kings mill"} } ], "must_not": [ { "match": { "age": "28" } } ] } } }
should:匹配结果中的firstname字段最好有Cummings,没有也可以,有的话会增加评分
javascript GET bank/_search { "query": { "bool": { "should": [ { "match": { "firstname": "Cummings"} } ] } } }
filter:过滤,不会进行相关性得分
javascript GET bank/_search { "query": { "bool": { "filter": { "range": { "age": {"gte": 10, "lte": 30} } } } } }
语法
javascript "aggs":{ "aggs_name这次聚合的名字,方便展示在结果集中":{ "AGG_TYPE聚合的类型(avg,term,terms)":{} } }
搜索address中包含mill的所有人的年龄分布以及每个年龄段平均年龄(在上一次分组的基础上进一步分组统计),但不显示这些人的详情
javascript GET bank/_search { "query": { "match": { "address": "Mill" } }, "aggs": { "analysis": { // 起个分组的名字 "terms": { "field": "age", "size": 3 }, // terms:对年龄字段分组计数,只显示3条结果 "aggs": { // 在上一步分组的基础上进行进一步分组统计 "ageAvg": { // // 起个分组的名字 "avg": { // 求年龄字段的平均值 "field": "age" } } } } }, "size": 0 }
查出所有年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资以及这个年龄段的总体平均薪资
```javascript GET bank/search { "query": { "matchall": {} }, "aggs": { "analysis": { // 起个分组的名字 "terms": { "field": "age", "size": 100 }, "aggs": { "genderAgg": { "terms": { "field": "gender.keyword" }, "aggs": {"balanceAvg": {"avg": { "field": "balance"}} } },
"ageBalanceAvg": {
"avg": { "field": "balance" }
}
}
}
}, "size": 0 } ```
Mapping映射:类似mysql中给某个字段指定字段类型,这个字段能不能被索引
查看某个索引下的映射
javascript GET /my_index
创建索引并指定映射
javascript PUT /my_index { "mappings": { "properties": { "age": { "type": "integer"}, "email": { "type": "keyword"}, "name": { "type": "text"} } } }
添加新的字段映射
javascript PUT /my_index/_mapping { "properties": { "employee-id": { "type": "keyword", "index": false // "index": false,表明新增的字段不能被检索,只是一个冗余字段 } } }
更新映射,数据迁移
对于已存在的字段映射,不能再更新,更新必须创建新的索引,进行数据迁移
先创建newbank的正确映射,再进行数据迁移
javascript POST _reindex { "source": { "index": "bank", "type": "account" // 原索引中带type,所以加上type; 如果原索引中没有type,这行不用写 }, "dest": { "index": "newbank" } }
参考文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/7.4/java-rest-high.html
引入依赖
```java 7.4.2
org.elasticsearch.client elasticsearch-rest-high-level-client 7.4.2 ```
编写配置
java @Configuration public class ElasticSearchConfig { @Bean public RestHighLevelClient esRestClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("82.134.23.149", 9200, "http")) ); return client; } }
添加/更新记录
```java @Test public void indexData() throws IOException { User user = new User("ccb", "天津大学"); String jsonString = JSON.toJSONString(user);
IndexRequest request = new IndexRequest("users");
request.id("1");
request.source(jsonString,XContentType.JSON);
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println(response);
} ```