package com.es.www.es_client_test;
import java.io.IOException;
import java.util.Date;
import java.util.Map;
import org.apache.http.HttpHost;
import org.apache.lucene.index.Terms;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.DocWriteRequest.OpType;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
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.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse.ShardInfo;
import org.elasticsearch.action.support.replication.ReplicationResponse.ShardInfo.Failure;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.Fuzziness;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder.Field;
import org.elasticsearch.search.sort.FieldSortBuilder;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
/**
* es客户端测试
*
* @author Administrator
*
*/
public class EsClientTest {
/**
* 获取es客户端方法
*
* @return
*/
public static RestHighLevelClient getEsClient() {
RestHighLevelClient client = new RestHighLevelClient(
RestClient.builder(new HttpHost("192.168.99.164", 9200, "http")));
return client;
}
/**
* 创建索引
*/
public void createOneIndex(RestHighLevelClient client) {
// 创建索引名
CreateIndexRequest request = new CreateIndexRequest("java_index_test");
// 索引setting设置
request.settings(Settings.builder().put("index.number_of_shards", 5)// 分片数量
.put("index.number_of_replicas", 2)// 副本数量
.put("analysis.analyzer.default.tokenizer", "standard"));
// 设置索引的mapping
// 方式一:直接给出json串(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
// 方式二:给出封装成Map(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
// 方式三:使用XContentBuilder
XContentBuilder builder = null;
try {
builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("java_user_type");
{
builder.startObject("properties");
{
// 设置field名称
builder.startObject("id");
{
// 设置field类型
builder.field("type", "text");
}
builder.endObject();
// 设置field名称
builder.startObject("user_name");
{
// 设置field类型
builder.field("type", "text");
}
builder.endObject();// 设置field名称
builder.startObject("user_password");
{
// 设置field类型
builder.field("type", "text");
}
builder.endObject();// 设置field名称
builder.startObject("user_real_name");
{
// 设置field类型
builder.field("type", "text");
}
builder.endObject();// 设置field名称
builder.startObject("create_time");
{
// 设置field类型
builder.field("type", "date");
}
builder.endObject();// 设置field名称
builder.startObject("is_deleted");
{
// 设置field类型
builder.field("type", "integer");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
request.mapping("java_user_type", builder);
// 设置索引别名
request.alias(new Alias("java_index_test_alias"));
// 发送请求
@SuppressWarnings("deprecation")
CreateIndexResponse response = client.indices().create(request);
// 处理响应
boolean acknowledged = response.isAcknowledged();
boolean shardsAcknowledged = response.isShardsAcknowledged();
System.out.println("请求结果------->>");
System.out.println("acknowledged:" + acknowledged);
System.out.println("shardsAcknowledged:" + shardsAcknowledged);
// 异步方式发送请求(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
} catch (IOException e) {
e.printStackTrace();
}
// 方式四:直接用key-value对给出(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
}
/**
* 增加单个数据
*/
@SuppressWarnings("deprecation")
public void addOneRecord(RestHighLevelClient client) {
// 创建索引请求
IndexRequest request = new IndexRequest("java_index_test", "java_user_type",
"00b6d5612f734414d68088e359e4b008");
// 准备文档数据
// 方式一:直接给json串(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
// 方式二:以map对象来标识文档(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
// 方式三:用XContentBuilder来构建文档
XContentBuilder builder = null;
try {
builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.field("id", "00b6d5612f734414d68088e359e4b008");// 主键id
builder.field("user_name", "zhangsan");// 用户名
builder.field("user_password", "123456");// 密码
builder.field("user_real_name", "张三");// 用户真实姓名
builder.field("create_time", new Date());// 创建时间
builder.field("is_deleted", 0);// 是否删除
}
builder.endObject();
request.source(builder);
} catch (IOException e) {
e.printStackTrace();
}
// 方式四:直接用key-value对给出(详见网页链接:https://www.cnblogs.com/wangzhuxing/p/9609127.html#_label3)
// 发送请求
IndexResponse indexResponse = null;
try {
indexResponse = client.index(request);
} catch (ElasticsearchException e) {
if (e.status() == RestStatus.CONFLICT) {
System.out.println("冲突了,请在此填写冲突处理逻辑\n" + e.getDetailedMessage());
}
} catch (IOException e) {
e.printStackTrace();
}
// 处理响应
if (indexResponse != null) {
String index = indexResponse.getIndex();
String type = indexResponse.getType();
String id = indexResponse.getId();
long version = indexResponse.