ElasticSearch的介绍和Windows下的安装与使用以及增删改查操作

一、ElasticSearch的介绍

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

二、ElasticSearch的安装与使用

1、在安装ElasticSearch之前要在电脑安装node.js的的环境
1.1、node.js的安装步骤
下载node.js:下载地址
在这里插入图片描述
开始安装:
双击下载下来的.msi文件,开始安装node.js在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
现已安装完成,以下查看是否安装成功
在键盘按下【win+r】键,输入cmd
在这里插入图片描述
在这里插入图片描述
打开安装完成后的目录如下
在这里插入图片描述
新版的node.js自带npm,安装node.js时会一起安装,npm的作用就是对node.js依赖的包进行管理,也可以理解为用来安装/卸载node.js需要装的东西
node.js的环境配置
1.在安装的目录下创建两个文件夹为node_cache,node_global。cache为缓存路径,global是全局安装,这里在安装目录下创建是因为,在以后执行npm install express [-g]时,会将安装的模板安装到[C:\Users\用户名\AppData\Roaming\npm]路径中,会占用c盘空间
在这里插入图片描述
创建完两个空文件夹之后,打开cmd命令窗口,输入

npm config set prefix "D:\安装路径\node_global"
npm config set cache "D:\安装路径\node_cache"

设置好以后打开我的电脑-右键-属性-高级系统设置-高级-环境变量
在这里插入图片描述
在系统变量下新建【node_path】输入:D:\javaload\node\node_global\node_modules
在这里插入图片描述
在用户变量下的path修改默认路径为D:\javaload\node\node_global
在这里插入图片描述

在这里插入图片描述
测试:配置完成后安装midule进行测试
在这里插入图片描述
1.2、node.js安装完成后安装ElasticSearch
ElasticSearch官网下载:下载地址
官网下载特别的慢可在百度云下载:
链接:百度云下载
提取码:0vqh

----下载完成后,对文件进行解压
在这里插入图片描述
----打开到elasticsearch下的bin目录
在这里插入图片描述
双击elasticearch.bat
在这里插入图片描述
这样显示安装完成,可以访问http://localhost:9200/这样就是安装成功
在这里插入图片描述
1.3安装ElasticSearch-head插件
先安装grunt
打开cmd输入npm install -g grunt-cli就可以了
查看版本号grunt -version
在这里插入图片描述
安装完成后,进入elasticSearch-head文件夹下,输入cmd执行命令:npm install进行安装,此处安装速度可能会很慢
安装完成以后执行npm run start 或者grunt server启动head插件,这样就安装成功了,也可以访问localhost:9100
在这里插入图片描述
修改es.yml中的参数
在这里插入图片描述
新增参数

# 增加新的参数,这样head插件可以访问es
http.cors.enabled: true 
http.cors.allow-origin: "*"
@注意,设置参数的时候:后面要有空格!

在这里插入图片描述
重新启动es访问:http://localhost:9100就好了
在这里插入图片描述
1.4、安装ik分词器
将ik分词器解压在es的安装目录下的plugins就好了
在这里插入图片描述
1.5、安装kibana
解压kibana,进入config目录下,打开kibana.yml文件
在这里插入图片描述
在里面加上下面两句就好了

i18n.locale: "zh-CN"
elasticsearch.hosts: ["http://localhost:9200"]

启动Kibana,在kibana下的bin目录输入cmd,在输入.\kibana.bat就可以启动成功了
在这里插入图片描述

访问地址http://localhost:5601
在这里插入图片描述

三、ElasticSearch的增删改查demo

**1、创建本地连接ElasticSearch**
package com.es.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class ElasticSearchClientConfig {
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(
                new HttpHost("127.0.0.1",9200,"http")));
        return client;
    }
}

二、创建pojo对象
package com.es.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String name;
    private Integer age;
}

三、创建测试类

package com.es;

import com.alibaba.fastjson.JSON;
import com.es.pojo.User;
import org.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
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.master.AcknowledgedResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

/**
 * es高级客户端测试
 */
@SpringBootTest
class EsDemoApplicationTests {
	@Autowired
	@Qualifier("restHighLevelClient")
	RestHighLevelClient client;
	@Test
	void contextLoads() {
	}
	//测试索引的创建
	@Test
	void testCreateIndex() throws IOException {
		//创建索引请求
		CreateIndexRequest request = new CreateIndexRequest("xu_index");
		//执行请求
		client.indices().create(request, RequestOptions.DEFAULT);
		System.out.println("123");
	}
	//测试获取索引
	@Test
	void testExistIndex() throws IOException {
		GetIndexRequest request = new GetIndexRequest("xu_index");
		boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}
	//删除库
	@Test
	void testDelete() throws IOException {
		DeleteIndexRequest request = new DeleteIndexRequest("xu");
		//删除
		AcknowledgedResponse delete = client.indices().delete(request,RequestOptions.DEFAULT);
		System.out.println(delete.isAcknowledged());
	}

	//测试添加文档
	@Test
	void testAddDocument() throws IOException {
		User user = new User("张三",17);
		IndexRequest request = new IndexRequest("xu_index");
		request.id("1");
		request.timeout("1s");
		//将数据放入请求
		request.source(JSON.toJSONString(user), XContentType.JSON);
		//客户端发送请求
		IndexResponse indexResponse=client.index(request, RequestOptions.DEFAULT);
		System.out.println(indexResponse.toString());
		System.out.println(indexResponse.status());//对应我们的命令返回的状态
	}
	//获取文档,判断是否存在
	@Test
	void testExists() throws IOException {
		GetRequest request = new GetRequest("xu_index","1");
		//不获取返回的_soure的上下文
		request.fetchSourceContext(new FetchSourceContext(false));
		request.storedFields("_none_");
		boolean exists = client.exists(request, RequestOptions.DEFAULT);
		System.out.println(exists);
	}
	//获取文档信息
	@Test
	void testGetDocument() throws IOException {
		GetRequest request = new GetRequest("xu_index","1");
		GetResponse response = client.get(request, RequestOptions.DEFAULT);
		System.out.println(response.getSourceAsString());//打印文档的内容
		System.out.println(response);
	}
	//更新文档信息
	@Test
	void testUpdate() throws IOException {
		UpdateRequest request = new UpdateRequest("xu_index","1");
		request.timeout("1s");
		User user = new User("李四",19);
		request.doc(JSON.toJSONString(user),XContentType.JSON);
		UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT);
		System.out.println(updateResponse.status());
	}
	//删除文档记录
	@Test
	void testDocDelete() throws IOException {
/*		DeleteResponse response = client.prepareDelete("company", "employee", "1").get();
		System.out.println(response.getResult());*/
		/*DeleteRequest request = new DeleteRequest("xu_index","2");
		request.timeout("1s");
		DeleteResponse deleteResponse = client.delete(request,RequestOptions.DEFAULT);
		System.out.println(deleteResponse.status());*/
	}

	//批量插入数据
	@Test
	void testBulkReuest() throws IOException {
		BulkRequest bulkRequest = new BulkRequest();
		bulkRequest.timeout("10s");
		List<User> userList = new ArrayList<>();
		userList.add(new User("张三0", 18));
		userList.add(new User("张三1", 18));
		userList.add(new User("张三2", 18));
		userList.add(new User("张三3", 18));
		userList.add(new User("张三4", 18));
		userList.add(new User("张三5", 18));
		userList.add(new User("张三6", 18));
		userList.add(new User("张三7", 18));
		userList.add(new User("张三8", 18));
		System.out.println(userList);
		for ( int i = 0;i<userList.size();i++){
			bulkRequest.add(
					new IndexRequest("test2").id(""+(i+1))
					.source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
			);
		}
		BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
		System.out.println(bulkResponse.hasFailures());//判断是否失败

	}
	//查询
	@Test
	void testSearch() throws IOException {
		SearchRequest searchRequest = new SearchRequest("xu_index");
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		//searchSourceBuilder.query(QueryBuilders.matchAllQuery());//查询所有
		searchSourceBuilder.query(QueryBuilders.multiMatchQuery("0", "name"));//匹配查询
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
		searchRequest.source(searchSourceBuilder);
		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
		System.out.println(JSON.toJSONString(searchResponse.getHits()));
		System.out.println("==============================");
		System.out.println("总条数"+searchResponse.getHits().getTotalHits().value);
		for (SearchHit DFile: searchResponse.getHits().getHits() ) {
			System.out.println(DFile.getSourceAsMap());
		}

	}
	//分页查询,排序
	@Test
	void test1Search() throws IOException {
		//指定索引库
		SearchRequest searchRequest = new SearchRequest("xu_index");
		//构造查询对象
		SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
		//添加分页条件,从第几个开始,返回几个
		//searchSourceBuilder.from(0).size(3);
		searchSourceBuilder.query(QueryBuilders.matchAllQuery());//查询所有
		//searchSourceBuilder.query(QueryBuilders.multiMatchQuery("张三", "name"));//匹配查询
		//按照score排序(默认倒序)
		//searchSourceBuilder.sort(SortBuilders.scoreSort().order(SortOrder.ASC));
		//根据id排序(倒序)
		searchSourceBuilder.sort(SortBuilders.fieldSort("_id").order(SortOrder.DESC));
		//设置执行时间
		searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
		//执行请求
		searchRequest.source(searchSourceBuilder);
		SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
		System.out.println(JSON.toJSONString(searchResponse.getHits()));
		System.out.println("==============================");
		System.out.println("总条数"+searchResponse.getHits().getTotalHits().value);
		for (SearchHit DFile: searchResponse.getHits().getHits() ) {
			System.out.println(DFile.getSourceAsMap());
		}

	}













//批量增删改
		@Test
		public void  testCUD() throws IOException {
			//初始化
			BulkRequest bulkRequest = new BulkRequest();
			//批量增加
			List<User> userList = new ArrayList<>();
			userList.add(new User("张三0", 18));
			userList.add(new User("张三1", 18));
			userList.add(new User("张三2", 18));
			userList.add(new User("张三3", 18));
			userList.add(new User("张三4", 18));
			userList.add(new User("张三5", 18));
			userList.add(new User("张三6", 18));
			userList.add(new User("张三7", 18));
			userList.add(new User("张三8", 18));
			System.out.println(userList);
			for ( int i = 0;i<userList.size();i++){
				bulkRequest.add(
						new IndexRequest("test2").id(""+(i+1))
								.source(JSON.toJSONString(userList.get(i)),XContentType.JSON)
				);
			}
			BulkResponse bulkResponse = client.bulk(bulkRequest, RequestOptions.DEFAULT);
			System.out.println(bulkResponse.hasFailures());//判断是否失败
		}
	//










}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值