zoukankan      html  css  js  c++  java
  • elasticsearch Java High Level REST 相关操作封装

     pox.xml文件添加以下内容

    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.3.2</version>
    </dependency>

    新建ESHighLevelRestUtil.java

    package com;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.ElasticsearchException;
    import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
    import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
    import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
    import org.elasticsearch.action.admin.indices.delete.DeleteIndexResponse;
    import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
    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.support.replication.ReplicationResponse;
    import org.elasticsearch.action.DocWriteResponse;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    import org.elasticsearch.common.settings.Settings;
    import org.elasticsearch.common.xcontent.XContentType;
    import org.elasticsearch.rest.RestStatus;
    
    public class ESHighLevelRestUtil {
    
    	static RestHighLevelClient client = new RestHighLevelClient(
    			RestClient.builder(new HttpHost("172.19.12.249", 9200, "http")));
    
    	/**
    	 * 验证索引是否存在
    	 * 
    	 * @param index
    	 *            索引名称
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean indexExists(String index) throws Exception {
    		GetIndexRequest request = new GetIndexRequest();
    		request.indices(index);
    		request.local(false);
    		request.humanReadable(true);
    
    		boolean exists = client.indices().exists(request);
    		return exists;
    	}
    
    	/**
    	 * 
    	 * @param index
    	 * @param indexType
    	 * @param properties
    	 *            结构: {name:{type:text}} {age:{type:integer}}
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean indexCreate(String index, String indexType,
    			Map<String, Object> properties) throws Exception {
    
    		if (indexExists(index)) {
    			return true;
    		}
    		CreateIndexRequest request = new CreateIndexRequest(index);
    		request.settings(Settings.builder().put("index.number_of_shards", 3)
    				.put("index.number_of_replicas", 2));
    
    		Map<String, Object> jsonMap = new HashMap<>();
    		Map<String, Object> mapping = new HashMap<>();
    		mapping.put("properties", properties);
    		jsonMap.put(indexType, mapping);
    		request.mapping(indexType, jsonMap);
    
    		CreateIndexResponse createIndexResponse = client.indices().create(
    				request);
    		boolean acknowledged = createIndexResponse.isAcknowledged();
    		return acknowledged;
    	}
    
    	/**
    	 * 删除索引
    	 * 
    	 * @param index
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean indexDelete(String index) throws Exception {
    		try {
    			DeleteIndexRequest request = new DeleteIndexRequest(index);
    			DeleteIndexResponse deleteIndexResponse = client.indices().delete(
    					request);
    			return deleteIndexResponse.isAcknowledged();
    		} catch (ElasticsearchException exception) {
    			if (exception.status() == RestStatus.NOT_FOUND) {
    				return true;
    			} else {
    				return false;
    			}
    		}
    	}
    
    	/**
    	 * 创建更新文档
    	 * 
    	 * @param index
    	 * @param indexType
    	 * @param documentId
    	 * @param josonStr
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean documentCreate(String index, String indexType,
    			String documentId, String josonStr) throws Exception {
    		IndexRequest request = new IndexRequest(index, indexType, documentId);
    
    		request.source(josonStr, XContentType.JSON);
    		IndexResponse indexResponse = client.index(request);
    
    		if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
    				|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
    			return true;
    		}
    		ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
    		if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
    			return true;
    		}
    		if (shardInfo.getFailed() > 0) {
    			for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
    					.getFailures()) {
    				throw new Exception(failure.reason());
    			}
    		}
    		return false;
    	}
    
    	/**
    	 * 创建更新索引
    	 * 
    	 * @param index
    	 * @param indexType
    	 * @param documentId
    	 * @param map
    	 * @return
    	 * @throws Exception
    	 */
    	public boolean documentCreate(String index, String indexType,
    			String documentId, Map<String, Object> map) throws Exception {
    		IndexRequest request = new IndexRequest(index, indexType, documentId);
    
    		request.source(map);
    		IndexResponse indexResponse = client.index(request);
    
    		if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
    				|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
    			return true;
    		}
    		ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
    		if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
    			return true;
    		}
    		if (shardInfo.getFailed() > 0) {
    			for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
    					.getFailures()) {
    				throw new Exception(failure.reason());
    			}
    		}
    		return false;
    	}
    
    	/**
    	 * 创建索引
    	 * 
    	 * @param index
    	 * @param indexType
    	 * @param josonStr
    	 * @return
    	 * @throws Exception
    	 */
    	public String documentCreate(String index, String indexType, String josonStr)
    			throws Exception {
    		IndexRequest request = new IndexRequest(index, indexType);
    
    		request.source(josonStr, XContentType.JSON);
    		IndexResponse indexResponse = client.index(request);
    
    		String id = indexResponse.getId();
    		if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
    				|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
    			return id;
    		}
    		ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
    		if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
    			return id;
    		}
    		if (shardInfo.getFailed() > 0) {
    			for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
    					.getFailures()) {
    				throw new Exception(failure.reason());
    			}
    		}
    		return null;
    	}
    
    	/**
    	 * 创建索引
    	 * 
    	 * @param index
    	 * @param indexType
    	 * @param map
    	 * @return
    	 * @throws Exception
    	 */
    	public String documentCreate(String index, String indexType,
    			Map<String, Object> map) throws Exception {
    		IndexRequest request = new IndexRequest(index, indexType);
    
    		request.source(map);
    		IndexResponse indexResponse = client.index(request);
    
    		String id = indexResponse.getId();
    		if (indexResponse.getResult() == DocWriteResponse.Result.CREATED
    				|| indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
    			return id;
    		}
    		ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
    		if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
    			return id;
    		}
    		if (shardInfo.getFailed() > 0) {
    			for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
    					.getFailures()) {
    				throw new Exception(failure.reason());
    			}
    		}
    		return null;
    	}
    
    	public boolean documentDelete(String index, String indexType,
    			String documentId) throws Exception {
    		DeleteRequest request = new DeleteRequest(index, indexType, documentId);
    		DeleteResponse deleteResponse = client.delete(request);
    		if (deleteResponse.getResult() == DocWriteResponse.Result.NOT_FOUND) {
    			return true;
    		}
    		ReplicationResponse.ShardInfo shardInfo = deleteResponse.getShardInfo();
    		if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
    			return true;
    		}
    		if (shardInfo.getFailed() > 0) {
    			for (ReplicationResponse.ShardInfo.Failure failure : shardInfo
    					.getFailures()) {
    				throw new Exception(failure.reason());
    			}
    		}
    		return false;
    	}
    
    }
    

    新建ESHighLevelRestTest.java

    package com;
    
    import java.util.HashMap;
    import java.util.Map;
    
    import org.apache.http.HttpHost;
    import org.elasticsearch.action.admin.indices.get.GetIndexRequest;
    import org.elasticsearch.client.RestClient;
    import org.elasticsearch.client.RestHighLevelClient;
    
    public class ESHighLevelRestTest {
    	public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    		ESHighLevelRestUtil util = new ESHighLevelRestUtil();
    
    		System.out.println(util.indexExists("indextest001"));
    
    		Map<String, Object> map = new HashMap<String, Object>();
    		map.put("name", new HashMap() {
    			{
    				put("type", "text");
    			}
    		});
    		map.put("age", new HashMap() {
    			{
    				put("type", "double");
    			}
    		});
    		map.put("sex", new HashMap() {
    			{
    				put("type", "double");
    			}
    		});
    		map.put("address", new HashMap() {
    			{
    				put("type", "text");
    			}
    		});
    
    		// 创建主题
    		util.indexCreate("indextest005", "sx", map);
    
    		//创建文档1
    		System.out.println(util.documentCreate("indextest005", "sx",
    				new HashMap<String,Object>() {
    					{
    						put("name", "名称1");
    						put("age", 18);
    						put("sex", 10);
    						put("address", "地址1");
    					}
    				}));
    
    		//创建更新文档2
    		System.out.println(util.documentCreate("indextest005", "sx", "1",
    				new HashMap<String,Object>() {
    					{
    						put("name", "名称2");
    						put("age", 18);
    						put("sex", 10);
    						put("address", "地址2");
    					}
    				}));
    		
    		//删除文档
    		System.out.println(util.documentDelete("indextest005", "sx", "1"));
    	}
    }
    

    参考:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-overview.html

    相互学习,如有不正确的地方欢迎指正

  • 相关阅读:
    TCP四种计时器
    TCP滑动窗口机制的简洁模型
    JAVA安全模型
    MongoDB性能优化
    mysql权限管理
    一个类似抖音 APP 拍摄按钮效果的控件
    App 组件化/模块化之路——使用SDK的思路进行模块化设计接口
    在 Android 中如何优雅地配置私密信息
    在Android中使用枚举注解而不是枚举
    Android 组件化/模块化之路——在展示层搭建MVP结构
  • 原文地址:https://www.cnblogs.com/gmhappy/p/9472383.html
Copyright © 2011-2022 走看看