es--基础--07--es自身API

es–基础–07–es自身API


es入门学习7-java-es自身API


代码地址
https://gitee.com/DanShenGuiZu/learnDemo/tree/mysql_mybaties_DB/elasticsearch-learn

使用起前面的集群环境进行学习

1、公共的东西

1.1、项目位置

在这里插入图片描述

1.2、导入依赖

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

<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>transport</artifactId>
	<version>5.6.8</version>
</dependency>

<dependency>
    <groupId>org.elasticsearch.plugin</groupId>
    <artifactId>transport-netty4-client</artifactId>
    <version>5.6.8</version>
</dependency>

1.3、工具类

package fei.zhou.elasticsearch01;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

public class ESTools {
	
	public static String ipStr1 = "60.205.188.229";
	public static String ipStr2 = "60.205.188.229";
	public static String ipStr3 = "60.205.188.229";
	public static int port1 = 9301;
	public static int port2 = 9302;
	public static int port3 = 9303;
	// 集群名称
	public static String clusterName = "cluster.name";
	// 集群名称的值
	public static String clusterNameValue = "elasticsearch";
	
	/**
	 * 创建客户端
	 * 
	 * @author feizhou
	 * @since 2020/12/28 11:10
	 */
	public static TransportClient createClient() throws UnknownHostException {
		
		// 创建一个Settings对象
		Settings settings = Settings.builder()
				// 构建集群名称
				.put(clusterName, clusterNameValue).build();
		// 创建一个TransPortClient对象
		TransportClient client = new PreBuiltTransportClient(settings);
		// 添加集群间的通讯
		client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipStr1), port1));
		client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipStr2), port2));
		client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ipStr3), port3));
		
		System.out.println("创建客户端成功");
		return client;
	}
	
	/**
	 * 关闭客户端
	 * 
	 * @author feizhou
	 * @since 2020/12/28 11:10
	 */
	public static void closeClient(TransportClient client) {
		client.close();
		System.out.println("成功关闭客户端");
	}
	
	/**
	 * 查询
	 * 
	 * @author feizhou
	 * @since 2020/12/28 12:00
	 */
	public static SearchHit[] search(QueryBuilder queryBuilder, String indices, String types) throws Exception {
		
		TransportClient client = createClient();
		
		// 执行查询
		SearchResponse searchResponse = client.prepareSearch(indices).setTypes(types).setQuery(queryBuilder)
				// 执行查询
				.get();
		// 取查询结果
		SearchHits searchHits = searchResponse.getHits();
		
		SearchHit[] hits = searchHits.getHits();
		
		// 关闭client
		closeClient(client);
		return hits;
		
	}

	/**
	 * 分页查询
	 * 
	 * @author feizhou
	 * @since 2020/12/28 12:00
	 */
	public static SearchHits searchPage(QueryBuilder queryBuilder, String indices, String types, int startIndex,
			int pageSize) throws Exception {
		
		TransportClient client = createClient();
		
		// 执行查询
		SearchResponse searchResponse = client.prepareSearch(indices).setTypes(types).setQuery(queryBuilder)
				// 设置分页信息
				.setFrom(startIndex)
				// 每页显示的行数
				.setSize(pageSize)
				// 执行查询
				.get();
		// 取查询结果
		SearchHits searchHits = searchResponse.getHits();
		// 关闭client
		closeClient(client);
		return searchHits;
		
	}

}

2、索引

2.1、创建索引

    @Test
    // 创建索引
    public void createIndex() throws Exception {
        TransportClient client = ESTools.createClient();
        // 使用client对象创建一个索引库
        client.admin().indices().prepareCreate("blog5")
                // 执行操作
                .get();
        ESTools.closeClient(client);
        
    }

在这里插入图片描述

3、映射mapping

3.1、创建映射mapping

	@Test
	// 创建映射
	public void createMapping() throws Exception {
		TransportClient client = ESTools.createClient();


		XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
				.startObject()
					.startObject("article")
						.startObject("properties")
							.startObject("id")
								.field("type","long")
								.field("store", true)
							.endObject()
							.startObject("title")
								.field("type", "text")
								.field("store", true)
								.field("analyzer", "ik_smart")
							.endObject()
							.startObject("content")
								.field("type", "text")
								.field("store", true)
								.field("analyzer","ik_smart")
							.endObject()
						.endObject()
					.endObject()
				.endObject();
		//使用client把mapping信息设置到索引库中
		client.admin().indices()
				//设置要做映射的索引
				.preparePutMapping("blog5")
				//设置要做映射的type
				.setType("article")
				//mapping信息
					 //可以是XContentBuilder对象
					 //可以是json格式的字符串
				.setSource(xContentBuilder)
				//执行操作
				.get();

		ESTools.closeClient(client);

	}

在这里插入图片描述

4、文档document

4.1、创建文档

4.1.1、创建文档1(通过XContentBuilder)

	@Test
	// 创建一个文档对象
	public void createDocument() throws Exception {
		TransportClient client = ESTools.createClient();



		//创建一个文档对象
		XContentBuilder builder = XContentFactory.jsonBuilder()
				.startObject()
					.field("id",1)
					.field("title","北方入秋速度明显加快 多地降温幅度最多可达10度22222")
					.field("content", "低龄未成年人严重犯罪问题,社会关注,如何做到不枉不纵,精准惩治?刑法修正案(十一)对此作出重大修改,对法定最低刑事责任年龄作个别下调。规定12周岁以上低龄未成年人实施以下犯罪行为,应当负刑事责任")
				.endObject();
		//把文档对象添加到索引库
		client.prepareIndex()
				//设置索引名称
				.setIndex("blog5")
				//设置type
				.setType("article")
				//设置文档的id,如果不设置的话自动的生成一个id
				.setId("1")
				//设置文档信息
				.setSource(builder)
				//执行操作
				.get();


		ESTools.closeClient(client);

	}

4.1.2、创建文档2

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.6</version>
</dependency>


package fei.zhou.elasticsearch01.demo2;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.junit.Test;

import fei.zhou.elasticsearch01.ESTools;

public class Test1 {
	

	@Test
	public void createDocument2() throws Exception {
		TransportClient client = ESTools.createClient();


		//创建一个Article对象
		Article article = new Article();
		//设置对象的属性
		article.setId(3);
		article.setTitle("快讯!外媒:英国著名双面间谍乔治·布莱克在俄去世,终年98岁");
		article.setContent("【环球网报道】路透社刚刚消息称,俄罗斯对外情报局发言人伊万诺夫告诉塔斯社,英国冷战时期著名的双面间谍乔治·布莱克26日在俄罗斯去世,终年98岁。据路透社此前介绍,在1944年至1961年期间,布莱克曾担任英国的秘密间谍,后被起诉为前苏联刺探军情而被判入狱42年。1966年他从伦敦越狱,之后一直生活在莫斯科。2007年,俄罗斯对外情报局还为布莱克授勋,庆祝这名双重间谍85岁寿辰。");
		//把article对象转换成json格式的字符串。
		ObjectMapper objectMapper = new ObjectMapper();
		String jsonDocument = objectMapper.writeValueAsString(article);

		//使用client对象把文档写入索引库
		client.prepareIndex("blog5","article", "3")
				.setSource(jsonDocument, XContentType.JSON)
				.get();


		ESTools.closeClient(client);

	}

	public class Article {
		private long id;
		private String title;
		private String content;

		public long getId() {
			return id;
		}

		public void setId(long id) {
			this.id = id;
		}

		public String getTitle() {
			return title;
		}

		public void setTitle(String title) {
			this.title = title;
		}

		public String getContent() {
			return content;
		}

		public void setContent(String content) {
			this.content = content;
		}
	}

}

在这里插入图片描述

4.2、查询

4.2.1、关键词查询

	@Test
	public void testTermQuery() throws Exception {
		
		QueryBuilder queryBuilder = QueryBuilders.termQuery("content", "建了");
		String indices = "blog5";
		String types = "article";
		
		SearchHit[] hits = ESTools.search(queryBuilder, indices, types);
		
		if (hits != null && hits.length > 0) {
			for (SearchHit hit : hits) {
				Map<String, Object> map = hit.getSource();
				System.out.println("文档内容:" + map);
			}
		}
		
	}

在这里插入图片描述

4.2.2、字符串查询

	@Test
	public void testQueryStringQuery() throws Exception {
		// 创建一个QueryBuilder对象
		
		QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("建了房子").defaultField("content");
		
		String indices = "blog5";
		String types = "article";
		
		SearchHit[] hits = ESTools.search(queryBuilder, indices, types);
		
		if (hits != null && hits.length > 0) {
			for (SearchHit hit : hits) {
				Map<String, Object> map = hit.getSource();
				System.out.println("文档内容:" + map);
			}
		}
		
	}

在这里插入图片描述

4.2.3、ID查询

@Test
public void testSearchById() throws Exception {
	
	// 创建一个QueryBuilder对象
	QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "3");
	
	String indices = "blog5";
	String types = "article";
	
	SearchHit[] hits = ESTools.search(queryBuilder, indices, types);
	
	if (hits != null && hits.length > 0) {
		for (SearchHit hit : hits) {
			Map<String, Object> map = hit.getSource();
			System.out.println("文档内容:" + map);
		}
	}
	
}

在这里插入图片描述

4.2.4、分页查询

	@Test
	public void testSearchPage() throws Exception {
		// 创建一个QueryBuilder对象
		QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "3", "4", "5", "6");
		
		String indices = "blog5";
		String types = "article";
		int startIndex = 0;
		int pageSize = 2;

		SearchHits searchHits = ESTools.searchPage(queryBuilder, indices, types, startIndex, pageSize);

		System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
		SearchHit[] hits = searchHits.getHits();
		if (hits != null && hits.length > 0) {
			for (SearchHit hit : hits) {
				Map<String, Object> map = hit.getSource();
				System.out.println("文档内容:" + map);
			}
		}
	}

在这里插入图片描述

在这里插入图片描述

4.2.5、查询结果高亮操作

在这里插入图片描述

在这里插入图片描述

   @Test
	public void testSearchPageHight() throws Exception {
		
		TransportClient client = ESTools.createClient();
		
		// 创建一个QueryBuilder对象
		QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("建了房子").defaultField("content");
		
		String indices = "blog5";
		String types = "article";
		
		String highlightField = "content";
		
		HighlightBuilder highlightBuilder = new HighlightBuilder();
		// 高亮显示的字段
		highlightBuilder.field(highlightField);
		highlightBuilder.preTags("<em>");
		highlightBuilder.postTags("</em>");
		
		// 执行查询
		SearchResponse searchResponse = client.prepareSearch(indices).setTypes(types).setQuery(queryBuilder)
				// 设置高亮信息
				.highlighter(highlightBuilder)
				// 执行查询
				.get();
		// 取查询结果
		SearchHits searchHits = searchResponse.getHits();
		
		System.out.println("查询结果总记录数:" + searchHits.getTotalHits());
		System.out.println("************高亮结果");
		SearchHit[] hits = searchHits.getHits();
		if (hits != null && hits.length > 0) {
			for (SearchHit hit : hits) {
				Map<String, HighlightField> highlightFields = hit.getHighlightFields();
				System.out.println("高亮字段:" + highlightFields);
			}
		}
		ESTools.closeClient(client);
	}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值