ES http协议API
官网地址: https://www.elastic.co/guide/index.html

建议先看引言:https://www.elastic.co/guide/en/elasticsearch/reference/index.html
里面有相关的API说明,
java rest客户端api: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/index.html

我就只列举一下我觉得比较常用的的API文档

先说一下基本可以在浏览器中使用的API:

  1. 查询健康状态:
    http://192.168.23.10:9201/_cat/health?v
  2. 查询所有节点
    http://192.168.23.10:9201/_cat/nodes?v
  3. 查询所有索引
    http://192.168.23.10:9201/_cat/indices?v
  4. 查询单个索引的 mapping 和 设置详情
    http://192.168.23.10:9201/索引名称/
  5. 根据数据的ID查询数据详情
    http://192.168.23.10:9201/索引名称/类型/id号
  6. 查询索引的所有数据
    http://192.168.23.10:9201/索引名称/_search
    http://192.168.23.10:9201/索引名称/_search?from=1&size=10
    http://192.168.23.10:9201/索引名称/_search?from=1&size=10&_source=mobile,user_id
    http://192.168.23.10:9201/索引名称/_search?q=city:%E6%B7%B1

maven 库,根据不同版本的ES,选择不同的库

<dependency>
			<groupId>org.elasticsearch.client</groupId>
			<artifactId>elasticsearch-rest-high-level-client</artifactId>
			<version>6.4.3</version>
			<exclusions>
                <exclusion>
                    <groupId>org.elasticsearch</groupId>
                    <artifactId>elasticsearch</artifactId>
                </exclusion>
            </exclusions>
		</dependency>

	   <dependency>
			<groupId>org.elasticsearch</groupId>
			<artifactId>elasticsearch</artifactId>
			<version>6.4.3</version>
		</dependency>

客户端连接

class ElasticClient{
	
	private static RestHighLevelClient client;
	
	private static ElasticClient ela;
	
	private ElasticClient() {
	//可以指定多个 节点的 地址
//		client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.23.10",9201,"http"),new HttpHost("192.168.23.11",9201,"http")));
		client = new RestHighLevelClient(RestClient.builder(new HttpHost("192.168.23.10",9201,"http")));

	}
	
	public  RestHighLevelClient getClient() {
		return client;
	}
	public static ElasticClient init() {
		if(ela == null) {
			synchronized (ElasticClient.class) {
				if(ela !=null) {
					return ela;
				}
				ela = new ElasticClient();
				return ela;
			}
		}
		return ela;
	}
	
}

新建索引

    public static RestHighLevelClient init() {
		return ElasticClient.init().getClient();
	}
	
	public static void CreateIndexRequests() throws Exception {
	 //指定索引名称
		CreateIndexRequest request = new CreateIndexRequest("search_text");
		//指定分片和 备份数量
		request.settings(Settings.builder().put("index.number_of_shards", 2).put("index.number_of_replicas", 1));
		
		XContentBuilder b= XContentFactory.jsonBuilder();
		b.startObject();
		{
			b.startObject("properties");
			{
				b.startObject("title");
				{
					b.field("type", "text");//类型 keyword不分词,text  分词
					b.field("analyzer", "ik_max_word");//指定分词器
					b.field("search_analyzer", "ik_max_word");//指定分词器
				}
				b.endObject();
				b.startObject("content");
				{
					b.field("type", "text");//类型 keyword不分词,text  分词
					b.field("analyzer", "ik_max_word");//指定分词器
					b.field("search_analyzer", "ik_max_word");//指定分词器
				}
				b.endObject();
			}
			b.endObject();
		}
		b.endObject();
		//指定type  类型
		request.mapping("_doc", b);
		try {
			CreateIndexResponse rep =  init().indices().create(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}
	

向索引中添加数据

	public static void IndexRequest(String title,String content) {
		IndexRequest request = new IndexRequest("search_text").type("_doc");
		Map<String, Object> m = new HashMap<String, Object>();
//		m.put("title", "搜索信息标题:"+j);
//		m.put("value", "搜索信息内容:"+j);
		
		m.put("title", title);
		m.put("content", content);
		
		// 索引中接口一个map对象数据,也可以是JSON格式字符串也能支持
		request.source(m);
		try {
			IndexResponse rep = init().index(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

删除索引

public static void deleteIndexRequest() {
//指定删除的索引名称
		DeleteIndexRequest request = new DeleteIndexRequest("cat_luo_1");
		try {
			DeleteIndexResponse rep =  init().indices().delete(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

查询多个 索引的 信息(mapping)

public static void listIndexRequest() {
		GetIndexRequest getIndexRequest = new GetIndexRequest();
		getIndexRequest.indices("cat_luo_1","cat_luo_2");
		try {
			GetIndexResponse rep =  init().indices().get(getIndexRequest, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

判断索引是否存在

public static void existsIndexRequest() {
		GetIndexRequest request = new GetIndexRequest();request.indices("cat_luo_1");
		try {
			boolean rep =  init().indices().exists(request, RequestOptions.DEFAULT);
			System.out.println(rep);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

停用和 启用索引

/**
	 * 启用索引
	 */
	public static void openIndexRequest() {
		OpenIndexRequest request = new OpenIndexRequest("cat_luo_1");
		try {
			OpenIndexResponse rep =  init().indices().open(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}
	
	/**
	 * 停用索引
	 */
	public static void closeIndexRequest() {
		CloseIndexRequest request = new CloseIndexRequest("cat_luo_1");
		try {
			CloseIndexResponse rep =  init().indices().close(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

根据ID 查询数据


```java
/**
	 * ID 必须有
	 */
	public static void GetRequest() {
		// 索引名称,类型,ID
		GetRequest request = new GetRequest("cat_luo_2").type("_doc").id("CxOGDnMBUhwOurg721NN");
		try {
			GetResponse rep = init().get(request, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

查询数据

public static void SearchRequest() {
		try {
			SearchSourceBuilder b = new SearchSourceBuilder();
			//指定字段查询
			b.query(QueryBuilders.termQuery("title", "a"));
			//指定索引 和 类型
			SearchRequest searchRequest = new SearchRequest("search_text").types("_doc"); 
			searchRequest.source(b);
			SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
简单查询匹配字符串
//输入要查询的字符串, 也可以指定在那个字段上查询,也可以不指定,该字符串会被分词
 QueryBuilder bu = QueryBuilders.simpleQueryStringQuery("a").field("title")
term查询

指定词句查询。
例如:“佩奇是一只猪”,假设被分词为 “佩奇”,“是”,“一只”,“猪”
当使用 “佩奇”,“猪”这种去查询 可以用过 term 匹配到该记录

但是 通过“一只猪” 来查询,就查询不到,以为 “一只猪” 不在索引的词语里面

QueryBuilder bu = QueryBuilders.termQuery("title", "a");
bool 组合查询
bool查询里面 可以组合 must。 mustnot, should , term  等查询方式
must   必须包含  
mustnot  必须不包含
should   或 

例如有一个索引,2个字段,title 标题,value 内容
查询条件:找出title中必须包含字符串“a”,并且“value“必须包含 字符串 “c”或者“b”
那么查询条件就是

QueryBuilder bu = QueryBuilders.boolQuery()
					.must(QueryBuilders.boolQuery().must(QueryBuilders.termQuery("title", "a")))
					.must(QueryBuilders.boolQuery().should(QueryBuilders.termQuery("value", "c"))
								.should(QueryBuilders.termQuery("value", "b")));

模糊搜索
//模糊搜索
	QueryBuilder bu1 =  QueryBuilders.fuzzyQuery("value", "c");
范围搜索
from 开始 ,to  结束
QueryBuilders.rangeQuery("字段").from("").to("");
正则匹配查询
//匹配查询
	QueryBuilder bu5 = QueryBuilders.wildcardQuery("title", "*b");
普通字符串查询
//会对输入字符串 进行分词查询
QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
对查询结果高亮显示
public static void SearchRequest() {
		try {
			SearchSourceBuilder b = new SearchSourceBuilder();
			QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
			b.query(bu6);
			HighlightBuilder h = new HighlightBuilder();
			h.field("title"); //指定高亮显示字段
			h.field("content"); //指定高亮显示字段
			b.highlighter(h);

			SearchRequest searchRequest = new SearchRequest("search_text").types("_doc"); 
			searchRequest.source(b);
			SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}
对结果进行分页 或者是 游标查询

在进行深度分页时,建议使用游标查询,有效提升查询效率

public static void SearchRequest() {
		try {
			SearchSourceBuilder b = new SearchSourceBuilder();
			QueryBuilder bu6 = QueryBuilders.queryStringQuery("Java 零基础");
			b.query(bu6);
			
			b.from(0);b.size(5); //指定分页大小
			SearchRequest searchRequest = new SearchRequest("search_text").types("_doc"); 
			searchRequest.source(b);
			//游标有效期 1分钟
     		searchRequest.scroll(TimeValue.timeValueMinutes(1L));
			SearchResponse rep = init().search(searchRequest, RequestOptions.DEFAULT);
			System.out.println(rep.toString());
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}// (request, null);
	}

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐