elasticsearch 版本 6.6 插入和查询数据

1. 引入POM文件

<dependencyManagement>  
		<dependencies>  
				<!-- es 查询 -->
			<dependency>
	            <groupId>org.elasticsearch</groupId>
	            <artifactId>elasticsearch</artifactId>
	             <version>6.6.0</version>
	        </dependency>
			<dependency>
				<groupId>org.elasticsearch.client</groupId>
				<artifactId>transport</artifactId>
	            <version>6.6.0</version>
			</dependency>
		</dependencies>  
	</dependencyManagement>

    <dependencies>
    	<dependency>
	            <groupId>org.elasticsearch</groupId>
	            <artifactId>elasticsearch</artifactId>
	        </dependency>
			<dependency>
				<groupId>org.elasticsearch.client</groupId>
				<artifactId>transport</artifactId>
			</dependency>
		
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-api</artifactId>
			<version>2.7</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.7</version>
		</dependency>
		
		<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
		<dependency>
		    <groupId>com.alibaba</groupId>
		    <artifactId>fastjson</artifactId>
		    <version>1.2.47</version>
		</dependency>
    </dependencies>

 DepencyManagement使用在此:

当我们的项目模块很多的时候,我们使用Maven管理项目非常方便,帮助我们管理构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
由于我们的模块很多,所以我们又抽象了一层,如下图抽出一个parent来管理子项目的公共的依赖。为了项目的正确运行,必须让所有的子项目使用依赖项的统一版本,必须确保应用的各个项目的依赖项和版本一致,才能保证测试的和发布的是相同的结果。
在我们项目顶层的POM文件中,我们会看到dependencyManagement元素。通过它元素来管理jar包的版本,让子项目中引用一个依赖而不用显示的列出版本号。Maven会沿着父子层次向上走,直到找到一个拥有dependencyManagement元素的项目,然后它就会使用在这个dependencyManagement元素中指定的版本号。

2.创建索引:

通过Head插件或者postman 建立映射:

{
    "properties": {
        "title": {
            "type": "text"
        },
        "publishDate": {
            "type": "date"
        },
        "content": {
            "type": "text"
        },
        "director": {
            "type": "keyword"
        },
        "price": {
            "type": "float"
        }
    }
}
title 电影名称 publishDate 发布日期 content 简介 director导演 price 票价
添加文档,数据准备:
 

 

3. 插入和查询:

package auto;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentType;
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.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * @author LZHH_2008
 * @time   2020年7月14日下午3:46:31
 */
public class ESMain {
	
	public static void main(String[] args) {
//      //通过setting对象指定集群配置信息, 配置的集群名
//      Settings settings = Settings.builder().put("cluster.name", clusterName) // 设置ES实例的名称
//              .put("client.transport.sniff", true) // 自动嗅探整个集群的状态,把集群中其他ES节点的ip添加到本地的客户端列表中
//              .build();
//      client = new PreBuiltTransportClient(settings);
		//没有指定集群名称  获取客户端连接信息
		TransportClient client = null;
		try {
			client = new PreBuiltTransportClient(Settings.EMPTY)
			            .addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.9.24"), 9300));
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
		
	    System.out.println("连接信息:" + client.toString());
	    try {
	    	//addData(client);  //添加数据
	    	//queryAll(client); //查询所有数据
	    	//queryPaging(client); //查询分页数据  from size
	    	//queryPagingAndOrder(client);//查询分页数据  from size 和排序
	    	//queryPagingAndOrderAndFilter(client);//查询分页数据  from size 和排序,过滤列
	    	//queryPagingAndOrderAndFilterAndByTitle(client); //查询分页数据  from size 和排序,过滤列, 条件查询
	    	queryPagingAndOrderAndFilterAndByTitleAndHighlight(client); //查询分页数据  from size 和排序,过滤列, 条件查询 , 高亮
		} catch (Exception e) {
			e.printStackTrace();
		} 
	    

	}
	
	/**
	 * 利用 from, size 分页查询 和排序,过滤具体列, 多条件查询   {"query":{"bool":{"must":[{"match":{"title":"战"}},{"match":{"content":"星球"}}]}},"from":0,"size":2,,"sort":[{"publishDate":{"order":"desc"}}]"_source":{"include":["title","price"]}}
	 * void
	 * @param client   
	 */
	public static void queryPagingAndOrderAndFilterAndByTitleAndContent(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		
		QueryBuilder queryBuilders = QueryBuilders.matchPhraseQuery("title", "战");
		QueryBuilder queryBuilders2 = QueryBuilders.matchPhraseQuery("content", "非洲");
		SearchResponse sr =  srb.setQuery(QueryBuilders.boolQuery().must(queryBuilders).must(queryBuilders2))
				.setFrom(10)
				.setSize(3)								//分页
				.setFetchSource(new String[]{"title","price"}, null)
				.addSort("publishDate", SortOrder.DESC) //排序
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}
	
	/**
	 * 利用 from, size 分页查询 和排序,过滤具体列, 简单条件查询,高亮   {"query":{"match":{"title":"狼"}},"from":0,"size":2,,"sort":[{"publishDate":{"order":"desc"}}]"_source":{"include":["title","price"]},"highlight":{"fields":{"title":{}}}}
	 * void
	 * @param client   
	 */
	public static void queryPagingAndOrderAndFilterAndByTitleAndHighlight(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		HighlightBuilder highlightBuilder = new HighlightBuilder();
		highlightBuilder.preTags("<h2>");
		highlightBuilder.postTags("</h2>");
		highlightBuilder.field("title");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchQuery("title", "狼"))
				.setFrom(10)
				.setSize(3)								//分页
				.setFetchSource(new String[]{"title","price"}, null)
				.addSort("publishDate", SortOrder.DESC) //排序
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}
	
	/**
	 * 利用 from, size 分页查询 和排序,过滤具体列, 简单条件查询   {"query":{"match":{"title":"狼"}},"from":0,"size":2,,"sort":[{"publishDate":{"order":"desc"}}]"_source":{"include":["title","price"]}}
	 * void
	 * @param client   
	 */
	public static void queryPagingAndOrderAndFilterAndByTitle(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchQuery("title", "狼"))
				.setFrom(10)
				.setSize(3)								//分页
				.setFetchSource(new String[]{"title","price"}, null)
				.addSort("publishDate", SortOrder.DESC) //排序
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}
	
	
	/**
	 * 利用 from, size 分页查询 和排序,过滤具体列   {"from":0,"size":2,,"sort":[{"publishDate":{"order":"desc"}}]"_source":{"include":["title","price"]}}
	 * void
	 * @param client   
	 */
	public static void queryPagingAndOrderAndFilter(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchAllQuery())
				.setFrom(10)
				.setSize(3)								//分页
				.setFetchSource(new String[]{"title","price"}, null)
				.addSort("publishDate", SortOrder.DESC) //排序
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}

	/**
	 * 利用 from, size 分页查询 和排序   {"from":0,"size":2,"sort":[{"publishDate":{"order":"desc"}}]}
	 * void
	 * @param client   
	 */
	public static void queryPagingAndOrder(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchAllQuery())
				.setFrom(10)
				.setSize(3)								//分页
				.addSort("publishDate", SortOrder.DESC) //排序
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}
	
	
	/**
	 * 利用 from, size 分页查询   {"from":0,"size":2}
	 * void
	 * @param client
	 */
	public static void queryPaging(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchAllQuery())
				.setFrom(10)
				.setSize(3)
				.execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
		}
	}
	
	/**
	 * 查询所有数据
	 * void
	 * @param client
	 */
	public static void queryAll(TransportClient client){
		SearchRequestBuilder srb = client.prepareSearch("film").setTypes("dongzuo");
		SearchResponse sr =  srb.setQuery(QueryBuilders.matchAllQuery()).execute().actionGet();
		SearchHits hits = sr.getHits();
		for(SearchHit item : hits){
			System.out.println(item.getSourceAsString());
			break;
		}
	}
	
	/**
	 * 添加文档
	 * @throws Exception
	 */
	public static void addData(TransportClient client ) throws Exception {
		JSONArray jsonArray = new JSONArray();
		
		for(int i = 0; i < 2000; i++){
		JSONObject JSONObject = new JSONObject();
		JSONObject.put("title", "前任3:再见前任"+i+1);
    	JSONObject.put("publishDate", "2017-12-29");
    	JSONObject.put("content", "一对好基友孟云(韩庚 饰)和余飞(郑恺 饰)跟女友都因为一点小事宣告分手,并且“拒绝挽回,死不认错”。两人在夜店、派对与交友软件上放飞人生第二春,大肆庆祝“黄金单身期”,从而引发了一系列好笑的故事。孟云与女友同甘共苦却难逃“五年之痒”,余飞与女友则棋逢敌手相爱相杀无绝期。然而现实的“打脸”却来得猝不及防:一对推拉纠结零往来,一对纠缠互怼全交代。两对恋人都将面对最终的选择:是再次相见?还是再也不见?");
    	JSONObject.put("director", "田羽生");
    	JSONObject.put("price", "35");
    	jsonArray.add(JSONObject);
    	
    	
    	JSONObject JSONObject2=new JSONObject();
    	JSONObject2.put("title", "机器之血"+i+1);
    	JSONObject2.put("publishDate", "2017-12-29");
    	JSONObject2.put("content", "2007年,Dr.James在半岛军火商的支持下研究生化人。研究过程中,生化人安德烈发生基因突变大开杀戒,将半岛军火商杀害,并控制其组织,接管生化人的研究。Dr.James侥幸逃生,只好寻求警方的保护。特工林东(成龙 饰)不得以离开生命垂危的小女儿西西,接受证人保护任务...十三年后,一本科幻小说《机器之血》的出版引出了黑衣生化人组织,神秘骇客李森(罗志祥 饰)(被杀害的半岛军火商的儿子),以及隐姓埋名的林东,三股力量都开始接近一个“普通”女孩Nancy(欧阳娜娜 饰)的生活,想要得到她身上的秘密。而黑衣人幕后受伤隐藏多年的安德烈也再次出手,在多次缠斗之后终于抓走Nancy。林东和李森,不得不以身犯险一同前去解救,关键时刻却发现李森竟然是被杀害的半岛军火商的儿子,生化人的实验记录也落入了李森之手......");
    	JSONObject2.put("director", "张立嘉");
    	JSONObject2.put("price", "45");
    	jsonArray.add(JSONObject2);
    	
    	JSONObject JSONObject3=new JSONObject();
    	JSONObject3.put("title", "星球大战8:最后的绝地武士"+i+1);
    	JSONObject3.put("publishDate", "2018-01-05");
    	JSONObject3.put("content", "《星球大战:最后的绝地武士》承接前作《星球大战:原力觉醒》的剧情,讲述第一军团全面侵袭之下,蕾伊(黛西·雷德利 Daisy Ridley 饰)、芬恩(约翰·博耶加 John Boyega 饰)、波·达默龙(奥斯卡·伊萨克 Oscar Isaac 饰)三位年轻主角各自的抉 择和冒险故事。前作中觉醒强大原力的蕾伊独自寻访隐居的绝地大师卢克·天行者(马克·哈米尔 Mark Hamill 饰),在后者的指导下接受原力训练。芬恩接受了一项几乎不可能完成的任务,为此他不得不勇闯敌营,面对自己的过去。波·达默龙则要适应从战士向领袖的角色转换,这一过程中他也将接受一些血的教训。");
    	JSONObject3.put("director", "莱恩·约翰逊");
    	JSONObject3.put("price", "55");
    	jsonArray.add(JSONObject3);
    	
    	JSONObject JSONObject4=new JSONObject();
    	JSONObject4.put("title", "羞羞的铁拳"+i+1);
    	JSONObject4.put("publishDate", "2017-12-29");
    	JSONObject4.put("content", "靠打假拳混日子的艾迪生(艾伦 饰),本来和正义感十足的体育记者马小(马丽 饰)是一对冤家,没想到因为一场意外的电击,男女身体互换。性别错乱后,两人互坑互害,引发了拳坛的大地震,也揭开了假拳界的秘密,惹来一堆麻烦,最终两人在“卷莲门”副掌门张茱萸(沈腾 饰)的指点下,向恶势力挥起了羞羞的铁拳。");
    	JSONObject4.put("director", "宋阳 / 张吃鱼");
    	JSONObject4.put("price", "35");
    	jsonArray.add(JSONObject4);
    	
    	JSONObject JSONObject5=new JSONObject();
    	JSONObject5.put("title", "战狼2"+i+1);
    	JSONObject5.put("publishDate", "2017-07-27");
    	JSONObject5.put("content", "故事发生在非洲附近的大海上,主人公冷锋(吴京 饰)遭遇人生滑铁卢,被“开除军籍”,本想漂泊一生的他,正当他打算这么做的时候,一场突如其来的意外打破了他的计划,突然被卷入了一场非洲国家叛乱,本可以安全撤离,却因无法忘记曾经为军人的使命,孤身犯险冲回沦陷区,带领身陷屠杀中的同胞和难民,展开生死逃亡。随着斗争的持续,体内的狼性逐渐复苏,最终孤身闯入战乱区域,为同胞而战斗。");
    	JSONObject5.put("director", "吴京");
    	JSONObject5.put("price", "38");
    	jsonArray.add(JSONObject5);
		}
    	for (int i = 0; i < jsonArray.size(); i++) {
			JSONObject jo = (com.alibaba.fastjson.JSONObject) jsonArray.get(i);
			IndexResponse response = client.prepareIndex("film", "dongzuo")
					.setSource(jo.toString(),XContentType.JSON).get();
		}
	}
}

 

参考: https://blog.csdn.net/u013456370/article/details/79626948

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值