elasticsearch学习笔记(二)

一、基础操作

1、创建索引

elasticsearch不像关系型数据库需要先建表,指定具体的字段才能存入数据。我们可以直接向elasticsearch中插入数据,只要需要指定index(索引)和type(类型)就行了
格式如下:
PUT /index/type/id
{
“field1”:“value1”,
“field2”:“value2”
}
例:
在这里插入图片描述
这是在没有预先创建索引的情况下,使用PUT请求插入数据,必须指定id,elasticsearch中的每一个文档都有唯一id

注意:elasticsearch6及以后的版本一个索引只支持一个type

当然我们使用的时候基本都会预先创建好索引
使用 PUT /index 创建索引:
在这里插入图片描述
tips:
1、elasticsearch7已经不允许指定type,type默认为_doc,若需要指定type可以在请求url后接参数include_type_name=true,然后将properties包含在type中
2、查看所有索引:GET /_cat/indices
3、删除索引:DELETE /index

2、插入数据

在这里插入图片描述
插入数据时也可以写入没有映射的字段,通过 dynamic (在创建索引映射字段时设置,与properties同级)参数来控制字段的新增,这个参数的值如下:
true:动态添加新的字段–缺省
false:忽略新的字段
strict:如果遇到新字段抛出异常

3、简单的数据查询

指定索引查询所有文档:
GET /index/_search
{
“query”: {
“match_all”: {}
}
}
在这里插入图片描述
hits里的hits即为我们写入的文档,match_all表示查询所有文档
通过id删除文档:DELETE /index/type/id

二、在Java项目中使用elasticsearch

1、添加依赖

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

2、使用rest-high-level-client

application.properties中配置:
elasticsearch.host=127.0.0.1
elasticsearch.port=9200
然后:


public class RestHighLevelClientFactory {

	@Value("${elasticsearch.host}")
	String HOST;
	@Value("${elasticsearch.port}")
	int PORT;
	
	private static RestHighLevelClientFactory restHighLevelClientFactory = new RestHighLevelClientFactory();
	public static RestHighLevelClientFactory biuld(){
		return restHighLevelClientFactory;
	}
	
	private RestHighLevelClient restHighLevelClient;
	
	public void init() {
		restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost(HOST, PORT, "http")));
	}

	public void destroy() {
		try {
			if(restHighLevelClient!=null) {
				restHighLevelClient.close();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public RestHighLevelClient getRHLClient() {
		return restHighLevelClient;
	}
}
@Configuration
public class ElasticsearchConfig {

	@Bean(initMethod="init",destroyMethod="destroy")
	public RestHighLevelClientFactory getRestHighLevelClientFactory() {
		return RestHighLevelClientFactory.biuld();
	}
	@Bean
	@Singleton
	public RestHighLevelClient getRestHighLevelClient() {
		return  getRestHighLevelClientFactory().getRHLClient();
	}
}

然后就可以使用@Autowired声明RestHighLevelClient对象了:

@Component
public class ElasticsearchDao {
	
	@Autowired
	RestHighLevelClient restHighLevelClient;
	@Autowired
	Gson gson;
	
	@Value("${elasticsearch.index}")
	String INDEX;
	@Value("${elasticsearch.type}")
	String TYPE;

	public String queryAll() {
		SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
		sourceBuilder.query(QueryBuilders.matchAllQuery()); // 对应kibana查询中的query match_all
		SearchRequest searchRequest = new SearchRequest();
		searchRequest.indices(INDEX);
		searchRequest.types(TYPE);
		searchRequest.source(sourceBuilder);
		try {
			SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
			SearchHit[] hits = response.getHits().getHits();
			return gson.toJson(hits[0].getSourceAsString());
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}
}

然后测试:
在这里插入图片描述


版权声明:本文为weixin_43993361原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。