ElasticSearch
- 添加依赖
- 指定集群
- 准备工作
- 添加文档
- 查询数据
- 删除文档
- 更新文档
- upsert
- mget
- bulk
- matchAllQuery
- matchQuery
- multiMatchQuery
- term
- terms
- 范围查询
- 聚合查询
- querystring
- boolquery
- 分组聚合
- filter聚合
- filters聚合
- range聚合
- missing聚合
- 集群管理
添加依赖
<dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>7.4.2</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
指定集群
private TransportClient getTransportClient() throws UnknownHostException {
// 指定es集群
Settings settings = Settings.builder().put("cluster.name", "my-application").build();
// 创建访问es服务器的客户端
return new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.76.77"), 9300));
}
此处的cluster.name和my-application,是elasticsearch.yml文件中的集群名字
准备工作
要添加中文,在kibana中先将title、content将默认分词器改成中文分词器
PUT /test1
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
},
"mappings": {
"properties":{
"id":{
"type":"long"
},
"title":{
"type":"text",
"analyzer":"ik_max_word"
},
"content":{
"type":"text",
"analyzer":"ik_max_word"
},
"postdate":{
"type":"date"
},
"url":{
"type":"text"
}
}
}
}
PUT /lib3
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 0
},
"mappings": {
"properties":{
"name":{"type":"text"},
"address":{"type":"text"},
"age":{"type":"integer"},
"interests":{"type":"text"},
"birthday":{"type":"date"}
}
}
}
多添加几条数据
PUT /lib3/_doc/1
{
"name":"tom",
"address":"china",
"age":23,
"interests":["台球","篮球"],
"birthday":"2020-01-11"
}
添加文档
public void add() throws Exception {
TransportClient client = getTransportClient();
// 添加文档
XContentBuilder doc = XContentFactory.jsonBuilder()
.startObject()
.field("id", "1")
.field("title", "java这是一个中文的标题")
.field("content", "中文内容java")
.field("postdate", "2020-01-13")
.field("url", "https://blog.csdn.net/yanyf2016")
.endObject();
IndexResponse response = client.prepareIndex("test1", "_doc", "10")
.setSource(doc).get();
System.out.println(response.status());
}
查询数据
public void select() throws UnknownHostException {
TransportClient client = getTransportClient();
// 数据查询
GetResponse response = client.prepareGet("test1", "_doc", "10").execute().actionGet();
// 得到查询出的数据
System.out.println(response.getSourceAsString());
client.close();
}
删除文档
public void delete() throws Exception {
TransportClient client = getTransportClient();
// 删除文档
DeleteResponse response = client.prepareDelete("test1", "_doc", "10").get();
System.out.println(response.status());
}
更新文档
public void update() throws Exception {
TransportClient client = getTransportClient();
// 更新文档
UpdateRequest request = new UpdateRequest();
request.index("test1")
.type("_doc")
.id("10")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title", "java设计模式")
.endObject()
);
UpdateResponse response = client.update(request).get();
System.out.println(response.status());
}
upsert
public void upsert() throws Exception {
TransportClient client = getTransportClient();
// 添加文档
IndexRequest request1 = new IndexRequest("test1", "_doc", "8")
.source(
XContentFactory.jsonBuilder()
.startObject()
.field("id", "2")
.field("title", "html标题")
.field("content", "中文内容java")
.field("postdate", "2020-01-13")
.field("url", "https://blog.csdn.net/yanyf2016")
.endObject()
);
UpdateRequest request2 = new UpdateRequest("test1", "_doc", "8")
.doc(
XContentFactory.jsonBuilder().startObject()
.field("title", "java模式")
.endObject()
).upsert(request1);
UpdateResponse response = client.update(request2).get();
System.out.println(response.status());
}
mget
// 批量查询
public void mget() throws Exception {
TransportClient client = getTransportClient();
MultiGetResponse responses = client.prepareMultiGet()
.add("test1", "_doc", "8", "10")
.add("lib3", "user", "2", "3")
.get();
for (MultiGetItemResponse respons : responses) {
GetResponse response = respons.getResponse();
if (response != null && response.isExists()) {
System.out.println(response.getSourceAsString());
}
}
}
bulk
// 批量添加
public void bulk() throws Exception {
TransportClient client = getTransportClient();
BulkRequestBuilder bulkrequestbuilder = client.prepareBulk();
// 批量添加
bulkrequestbuilder.add(client.prepareIndex("test1", "_doc", "7")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("id", "3")
.field("title", "python")
.field("content", "content")
.field("postdate", "2020-01-23")
.field("url", "www.baidu.com")
.endObject()
)
);
bulkrequestbuilder.add(client.prepareIndex("test1", "_doc", "9")
.setSource(
XContentFactory.jsonBuilder()
.startObject()
.field("id", "5")
.field("title", "fullter")
.field("content", "content")
.field("postdate", "2020-01-23")
.field("url", "www.ali.com")
.endObject()
)
);
BulkResponse bulkItemResponses = bulkrequestbuilder.get();
System.out.println(bulkItemResponses.status());
if (bulkItemResponses.hasFailures()) {
System.out.println("失败");
}
}
matchAllQuery
public void matchAllQuery() throws Exception {
TransportClient client = getTransportClient();
QueryBuilder qb = QueryBuilders.matchAllQuery();
SearchResponse sr = client.prepareSearch("test1")
.setQuery(qb)
.setSize(3).get();
SearchHits hits = sr.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
matchQuery
// 查询某个字段
public void match() throws Exception {
TransportClient client = getTransportClient();
QueryBuilder builder = QueryBuilders.matchQuery("content", "java");
SearchResponse response = client.prepareSearch("test1")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
multiMatchQuery
// 查询多个字段
public void multiMatchQuery() throws Exception {
TransportClient client = getTransportClient();
QueryBuilder builder = QueryBuilders.multiMatchQuery("中", "title", "content");
SearchResponse response = client.prepareSearch("test1")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
term
public void term() throws Exception {
TransportClient client = getTransportClient();
QueryBuilder builder = QueryBuilders.termQuery("title", "模式");
SearchResponse response = client.prepareSearch("test1")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
terms
public void terms() throws Exception {
TransportClient client = getTransportClient();
QueryBuilder builder = QueryBuilders.termsQuery("title", "模式", "java");
SearchResponse response = client.prepareSearch("test1")
.setQuery(builder)
.setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
范围查询
public void range() throws Exception {
TransportClient client = getTransportClient();
// 范围range查询
// QueryBuilder builder = QueryBuilders.rangeQuery("postdate").from("2020-01-10").to("2020-01-15").format("yyyy-MM-dd");
// prefix查询
// QueryBuilder builder = QueryBuilders.prefixQuery("title","java");
// 通配符wildcard查询
// QueryBuilder builder = QueryBuilders.wildcardQuery("title","java*");
// 模糊查询
// QueryBuilder builder = QueryBuilders.fuzzyQuery("title","j");
//type查询
// QueryBuilder builder = QueryBuilders.typeQuery("_doc");
// ids查询
QueryBuilder builder = QueryBuilders.idsQuery().addIds("8", "9");
SearchResponse response = client.prepareSearch("test1")
.setQuery(builder)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
Map<String, Object> sourceAsMap = hit.getSourceAsMap();
for (String key : sourceAsMap.keySet()) {
System.out.println(key + "=" + sourceAsMap.get(key));
}
}
}
聚合查询
public void sum() throws Exception {
TransportClient client = getTransportClient();
// AggregationBuilder agg = AggregationBuilders.max("aggMax").field("age");
// SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
// Max aggMax = response.getAggregations().get("aggMax");
// System.out.println(aggMax.getValue());
// AggregationBuilder agg = AggregationBuilders.min("aggMin").field("age");
// SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
// Min aggMax = response.getAggregations().get("aggMin");
// System.out.println(aggMax.getValue());
// 求基数
AggregationBuilder agg = AggregationBuilders.cardinality("aggCardinality").field("age");
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).get();
Cardinality cardinality = response.getAggregations().get("aggCardinality");
System.out.println(cardinality.getValue());
}
querystring
public void queryString() throws UnknownHostException {
TransportClient client = getTransportClient();
// 查询某个字段
// QueryBuilder build = QueryBuilders.commonTermsQuery("name","tom");
// 查询所有字段 +号表示含有 -号表示不含有
// QueryBuilder build = QueryBuilders.queryStringQuery("+喝酒 -跳舞");
QueryBuilder build = QueryBuilders.simpleQueryStringQuery("+喝酒");
SearchResponse response = client.prepareSearch("lib3")
.setQuery(build)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
boolquery
// 组合查询
public void boolquery() throws UnknownHostException {
TransportClient client = getTransportClient();
// QueryBuilder build = QueryBuilders.boolQuery()
// .must(QueryBuilders.matchQuery("interests","唱歌"))
// .mustNot(QueryBuilders.matchQuery("interests","跳舞"))
// .should(QueryBuilders.matchQuery("address","china"))
// .filter(QueryBuilders.rangeQuery("birthday").gte("2019-01-01").format("yyyy-MM-dd"));
// 不计算相关度分数
QueryBuilder build = QueryBuilders.constantScoreQuery(QueryBuilders.termQuery("name", "zs"));
SearchResponse response = client.prepareSearch("lib3")
.setQuery(build)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
}
}
分组聚合
public void termss() throws UnknownHostException {
TransportClient client = getTransportClient();
AggregationBuilder agg = AggregationBuilders.terms("terms").field("age");
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Terms terms = response.getAggregations().get("terms");
for (Terms.Bucket entry : terms.getBuckets()) {
System.out.println(entry.getKey() + ":" + entry.getDocCount());
}
}
filter聚合
public void filter() throws UnknownHostException {
TransportClient client = getTransportClient();
QueryBuilder query = QueryBuilders.termQuery("age", 26);
AggregationBuilder agg = AggregationBuilders.filter("filter", query);
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Filter filter = response.getAggregations().get("filter");
System.out.println(filter.getDocCount());
}
filters聚合
public void filters() throws UnknownHostException {
TransportClient client = getTransportClient();
AggregationBuilder agg = AggregationBuilders.filters("filters",
new FiltersAggregator.KeyedFilter("喝酒", QueryBuilders.termQuery("interests", "喝酒")),
new FiltersAggregator.KeyedFilter("跳舞", QueryBuilders.termQuery("interests", "跳舞")));
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Filters filters = response.getAggregations().get("filters");
for (Filters.Bucket entery : filters.getBuckets()) {
System.out.println(entery.getKey() + ":" + entery.getDocCount());
}
}
range聚合
public void rang() throws UnknownHostException {
TransportClient client = getTransportClient();
AggregationBuilder agg = AggregationBuilders
.range("range")
.field("age")
.addUnboundedTo(50)//(,to)
.addRange(20, 25)//[from ,to)
.addUnboundedFrom(25);//[from,)
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Range range = response.getAggregations().get("range");
for (Range.Bucket entery : range.getBuckets()) {
System.out.println(entery.getKey() + ":" + entery.getDocCount());
}
}
missing聚合
public void missing() throws UnknownHostException {
TransportClient client = getTransportClient();
AggregationBuilder agg = AggregationBuilders
.missing("missing")
.field("age");
SearchResponse response = client.prepareSearch("lib3").addAggregation(agg).execute().actionGet();
Aggregation aggregation = response.getAggregations().get("missing");
System.out.println(aggregation.toString());
}
集群管理
public void cluster() throws UnknownHostException {
TransportClient client = getTransportClient();
ClusterHealthResponse health = client.admin().cluster().prepareHealth().get();
String clusterName = health.getClusterName();
System.out.println("clusterName=" + clusterName);
int numberOfDataNodes = health.getNumberOfDataNodes();
System.out.println("numberOfDataNodes=" + numberOfDataNodes);
int numberOfNodes = health.getNumberOfNodes();
System.out.println("numberOfNodes=" + numberOfNodes);
for (ClusterIndexHealth health1 : health.getIndices().values()) {
String index = health1.getIndex();
int numberOfShards = health1.getNumberOfShards();
int numberOfReplicas = health1.getNumberOfReplicas();
System.out.printf("index=%s,numberOfShards=%d,numberOfReplicas=%d\n", index, numberOfShards, numberOfReplicas);
ClusterHealthStatus status = health1.getStatus();
System.out.println(status.toString());
}
}