【ElasticSearch7.X】学习笔记
四、JavaAPI使用
pom
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 的客户端 -->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<!-- elasticsearch 依赖 2.x 的 log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>2.0.10</version>
</dependency>
<!-- junit 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
4.1、客户端连接
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
public class ELKClient {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(
RestClient.builder(new HttpHost("192.168.3.34",9200,"http"))
);
//关闭客户端
client.close();
}
}
4.2、索引操作
4.2.1、创建索引
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import java.io.IOException;
public class ELKIndexCreate {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求
CreateIndexRequest request=new CreateIndexRequest("students");
//创建索引(请求,请求方式[默认])
CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
//响应状态
System.out.println("创建索引是否成功::"+response.isAcknowledged());
//关闭客户端
client.close();
}
}
4.2.2、查询索引
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetIndexResponse;
import java.io.IOException;
public class ELKIndexSearch {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 GetIndexRequest
GetIndexRequest request=new GetIndexRequest("students");
//查询索引
GetIndexResponse response = client.indices().get(request, RequestOptions.DEFAULT);
System.out.println("别名::"+response.getAliases());
System.out.println("索引结构::"+response.getMappings());
System.out.println("配置::"+response.getSettings());
//关闭客户端
client.close();
}
}
4.2.3、删除索引
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexResponse;
import java.io.IOException;
public class ELKIndexDelete {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 DeleteIndexRequest
DeleteIndexRequest request=new DeleteIndexRequest("students");
//删除索引
AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
//响应状态
System.out.println("删除操作::"+response.isAcknowledged());
//关闭客户端
client.close();
}
}
4.3、文档操作
建立一个学生类
public class Student {
private int id;
private String name;
private String sex;
private int age;
public int getId() {return id;}
public void setId(int id) {this.id = id;}
public String getName() { return name;}
public void setName(String name) { this.name = name;}
public String getSex() {return sex;}
public void setSex(String sex) {this.sex = sex;}
public int getAge() {return age;}
public void setAge(int age) {this.age = age;}
}
4.3.1、创建文档
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.databind.util.JSONPObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class ELKDocInsert {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 IndexRequest
IndexRequest request=new IndexRequest();
//设置索引并使用自定义id
request.index("students").id("001");
Student student=new Student();
student.setId(001);
student.setName("zhangsan");
student.setSex("男");
student.setAge(18);
//需要JSON数据类型
String JSONString = JSON.toJSONString(student);
//传入数据,并指定类型为JSON
request.source(JSONString, XContentType.JSON);
//插入数据
IndexResponse response = client.index(request, RequestOptions.DEFAULT);
System.out.println("创建文档是否成::"+response.getResult());
//关闭客户端
client.close();
}
}
4.3.2、更新数据
import com.alibaba.fastjson2.JSON;
import org.apache.http.HttpHost;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class ELKDocUpdate {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 UpdateRequest
UpdateRequest request=new UpdateRequest();
request.index("students").id("001");
//需要更改的字段
request.doc(XContentType.JSON,"name","lisi");
//更新数据
UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
System.out.println("文档状态::"+response.getResult());
//关闭客户端
client.close();
}
}
4.3.3、查询数据
import org.apache.http.HttpHost;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
public class ELKDocSearch {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 GetRequest
GetRequest request=new GetRequest();
request.index("students").id("001");
//查询数据get
GetResponse response = client.get(request, RequestOptions.DEFAULT);
System.out.println("Source数据内容::"+response.getSourceAsString());
//关闭客户端
client.close();
}
}
4.3.4、删除数据
import org.apache.http.HttpHost;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import java.io.IOException;
public class ELKDocDelete {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 DeleteRequest
DeleteRequest request=new DeleteRequest();
request.index("students").id("001");
//删除数据
DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
System.out.println("response::"+response.toString());
//关闭客户端
client.close();
}
}
4.4、复杂操作
4.4.1、批量操作
4.4.1.1、增加
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class ELKComplexInsert {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 BulkRequest
BulkRequest request=new BulkRequest();
request.add(new IndexRequest().index("students").id("001").source(XContentType.JSON,"name","liuyi","id",001,"sex","男","age",10));
request.add(new IndexRequest().index("students").id("002").source(XContentType.JSON,"name","chener","id",002,"sex","女","age",20));
request.add(new IndexRequest().index("students").id("003").source(XContentType.JSON,"name","zhangsan","id",003,"sex","男","age",30));
request.add(new IndexRequest().index("students").id("004").source(XContentType.JSON,"name","lisi","id",004,"sex","女","age",40));
request.add(new IndexRequest().index("students").id("005").source(XContentType.JSON,"name","wangwu","id",005,"sex","男","age",50));
request.add(new IndexRequest().index("students").id("006").source(XContentType.JSON,"name","zhaoliu","id",006,"sex","女","age",60));
request.add(new IndexRequest().index("students").id("007").source(XContentType.JSON,"name","sunqi","id",007,"sex","男","age",70));
//批量插入数据
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
System.out.println("花费时间::"+response.getTook());
System.out.println("每条事件::"+response.getItems());
//关闭客户端
client.close();
}
}
4.4.1.2、删除
import org.apache.http.HttpHost;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import java.io.IOException;
public class ELKComplexDelete {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 BulkRequest
BulkRequest request=new BulkRequest();
request.add(new DeleteRequest().index("students").id("005"));
request.add(new DeleteRequest().index("students").id("006"));
request.add(new DeleteRequest().index("students").id("007"));
//批量删除数据
BulkResponse response = client.bulk(request, RequestOptions.DEFAULT);
System.out.println("花费时间::"+response.getTook());
System.out.println("每条事件::"+response.getItems());
//关闭客户端
client.close();
}
}
4.4.2、全量查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKFullQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//全量查询matchAllQuery 需要用到SearchSourceBuilder
result.source(new SearchSourceBuilder().query(QueryBuilders.matchAllQuery()));
//查询全部文档
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.3、条件查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKConditionQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//要寻找确切的term需要使用termQuery由QueryBuilders创建 结果作为SearchSourceBuilder().query的参数
result.source(new SearchSourceBuilder().query(QueryBuilders.termQuery("name","zhangsan")));
//条件查询 name=张三
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.4、分页查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKPaginationQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//全量查询进行分页
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
//起始第几个
builder.from(0);
//每页几个
builder.size(2);
result.source(builder);
//分页查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.5、排序
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;
public class ELKSort {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClientRestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//全量查询进行排序
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
//根据age倒序排序
builder.sort("age", SortOrder.DESC);
result.source(builder);
//排序查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.6、过滤字段
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;
import java.io.IOException;
public class ELKFilterFields {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//全量查询
SearchSourceBuilder builder = new SearchSourceBuilder().query(QueryBuilders.matchAllQuery());
//排除字段
String[] excludes={};
//包含字段
String[] include={"name"};
//include,excludes顺序不能颠倒
builder.fetchSource(include,excludes);
result.source(builder);
//过滤
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.7、组合查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKCombinedQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//创建SearchSourceBuilder进行 查询
SearchSourceBuilder builder = new SearchSourceBuilder();
//创建 BoolQueryBuilder 进行条件查询
BoolQueryBuilder boolQueryBuilder= QueryBuilders.boolQuery();
//must必须满足 should允许满足 must_not必须不满足
boolQueryBuilder.must(QueryBuilders.matchQuery("name","zhangsan"));
builder.query(boolQueryBuilder);
result.source(builder);
//组合查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.8、范围查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKRangeQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//创建查询 SearchSourceBuilder
SearchSourceBuilder builder = new SearchSourceBuilder();
//使用哪个字段进行范围查询
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery("age");
//gte大于等于 gt大于 lt小于 lte小于等于
rangeQueryBuilder.gte(30);
builder.query(rangeQueryBuilder);
result.source(builder);
//组合查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.9、模糊查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.FuzzyQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKFuzzyQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//创建查询 SearchSourceBuilder
SearchSourceBuilder builder = new SearchSourceBuilder();
//创建模糊查询FuzzyQueryBuilder fuzzyQuery(字段,模板) fuzziness 字符误差数 取值有:zero、one、two、auto
FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("name", "zhangs").fuzziness(Fuzziness.TWO);
builder.query(fuzziness);
result.source(builder);
//模糊查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.10、高亮查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import java.io.IOException;
public class ELKHighlightQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求
SearchRequest result=new SearchRequest();
result.indices("students");
//创建查询
SearchSourceBuilder builder = new SearchSourceBuilder();
//查询条件与值
TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
builder.query(termQueryBuilder);
//创建高亮
HighlightBuilder highlightBuilder=new HighlightBuilder();
//前缀标签
highlightBuilder.preTags("<font color='red'>");
//后缀标签
highlightBuilder.postTags("</font>");
//高亮的值
highlightBuilder.field("name");
builder.highlighter(highlightBuilder);
result.source(builder);
//高亮
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
System.out.println("高亮显示::"+response);
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.11、聚合查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKAggregateQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//创建查询
SearchSourceBuilder builder = new SearchSourceBuilder();
//创建 分组 max取最大值 field字段
AggregationBuilder builder1= AggregationBuilders.max("maxAge").field("age");
builder.aggregation(builder1);
result.source(builder);
//聚合查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
System.out.println("最大值::"+response);
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}
4.4.12、分组查询
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilder;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import java.io.IOException;
public class ELKAggregateQuery {
public static void main(String[] args) throws IOException {
//创建ELK客户端
RestHighLevelClient client= new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.3.34",9200,"http")));
//创建请求 SearchRequest
SearchRequest result=new SearchRequest();
result.indices("students");
//创建查询 SearchSourceBuilder
SearchSourceBuilder builder = new SearchSourceBuilder();
//创建分组 terms组名 field字段
AggregationBuilder builder1= AggregationBuilders.terms("ageGroup").field("age");
builder.aggregation(builder1);
result.source(builder);
//聚合查询
SearchResponse response = client.search(result, RequestOptions.DEFAULT);
SearchHits hits = response.getHits();
System.out.println("总条数::"+hits.getTotalHits());
System.out.println("花费时间::"+response.getTook());
System.out.println("分组情况::"+response);
for(SearchHit hit:hits){
System.out.println(hit.getSourceAsString());
}
//关闭客户端
client.close();
}
}