阿里云 elasticsearch 增删改查
kibana 控制台

# 查询所有数据
GET /yixiurds_dev/_search
{
"query": {
"match_all": {
}
}
}
# 查询数据
GET /yixiurds_dev/elasticsearch/_search
{
"query": {
"match": {
"id":126
}
}
}
# 添加数据
POST /yixiurds_dev/elasticsearch/
{
"id":126,
"name":"测试",
"picture":"//yixiulian.oss-cn-shenzhen.aliyuncs.com/youpin/storage/376b74064cfeba5eff83b13ec24a269a.jpg",
"seo_title": "",
"seo_keywords": ""
}
# 修改数据
PUT /yixiurds_dev/elasticsearch/MQmk2msBS7i08yOenxyX
{
"id":126,
"name":"测试2",
"picture":"//yixiulian.oss-cn-shenzhen.aliyuncs.com/youpin/storage/376b74064cfeba5eff83b13ec24a269a.jpg",
"seo_title": "",
"seo_keywords": ""
}
# 不能删除数据
DELETE /yixiurds_dev/elasticsearch/_delete
{
"id":126
}
# 删除数据
DELETE /yixiurds_dev/elasticsearch/MQmk2msBS7i08yOenxyX
{}
# 删除索引
DELETE /yixiurds_dev
# 创建索引
PUT /yixiurds_dev
代码示例
@Component
public class ElasticsearchUtils {
private static final Logger logger = LoggerFactory.getLogger(ElasticsearchUtils.class);
private static String elasticHostName;
private static String elasticUserName;
private static String elasticPassword;
private static String elasticIndex;
private static RestClient restClient;
private static RestClient getRestClient() {
if (restClient == null) {
synchronized (ElasticsearchUtils.class) {
if (restClient == null) {
CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(elasticUserName, elasticPassword));
restClient = RestClient.builder(new HttpHost(elasticHostName, 9200))
.setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider)).build();
}
return restClient;
}
} else {
return restClient;
}
}
/**
* 更新搜索的商品
*/
public static void updateGoodsList(List<Goods> goodsList) {
RestClient restClient = getRestClient();
goodsList.forEach(goods -> {
GoodsEsResp goodsEsResp = getGoods(goods.getId());
List<String> esIds = goodsEsResp.getEsIds();
if (CollectionUtils.isEmpty(esIds)) {
return;
}
esIds.forEach(esId -> {
String method = "PUT";
String endpoint = "/" + elasticIndex + "/elasticsearch/" + esId;
HttpEntity entity = new NStringEntity(
"{\n" +
" \"id\" : " + goods.getId() + ",\n" +
" \"name\" : \"" + goods.getName()+ "\",\n" +
" \"picture\" : \"" + goods.getPicture() + "\",\n" +
" \"seo_title\" : \"" + goods.getSeoTitle() + "\",\n" +
" \"seo_keywords\" : \"" + goods.getSeoKeywords() + "\"\n" +
"}", ContentType.APPLICATION_JSON);
Response response = null;
try {
response = restClient.performRequest(method, endpoint, Collections.<String, String>emptyMap(), entity);
logger.info(JSON.toJSONString(response));
} catch (IOException e) {
logger.error(e.toString());
}
});
});
}
/**
* 添加搜索的商品
*/
public static void addGoodsList(List<Goods> goodsList) {
RestClient restClient = getRestClient();
goodsList.forEach(goods -> {
String method = "POST";
String endpoint = "/" + elasticIndex + "/elasticsearch/";
HttpEntity entity = new NStringEntity(
"{\n" +
" \"id\" : " + goods.getId() + ",\n" +
" \"name\" : \"" + goods.getName()+ "\",\n" +
" \"picture\" : \"" + goods.getPicture() + "\",\n" +
" \"seo_title\" : \"" + goods.getSeoTitle() + "\",\n" +
" \"seo_keywords\" : \"" + goods.getSeoKeywords() + "\"\n" +
"}", ContentType.APPLICATION_JSON);
Response response = null;
try {
response = restClient.performRequest(method, endpoint, Collections.<String, String>emptyMap(), entity);
logger.info(JSON.toJSONString(response));
} catch (IOException e) {
logger.error(e.toString());
}
});
}
/**
* 删除搜索的商品
*/
public static void delGoodsList(List<Goods> goodsList) {
RestClient restClient = getRestClient();
goodsList.forEach(goods -> {
GoodsEsResp goodsEsResp = getGoods(goods.getId());
List<String> esIds = goodsEsResp.getEsIds();
if (CollectionUtils.isEmpty(esIds)) {
return;
}
esIds.forEach(esId -> {
String method = "DELETE";
String endpoint = "/" + elasticIndex + "/elasticsearch/" + esId;
HttpEntity entity = new NStringEntity(
"{}", ContentType.APPLICATION_JSON);
Response response = null;
try {
response = restClient.performRequest(method, endpoint, Collections.<String, String>emptyMap(), entity);
logger.info(JSON.toJSONString(response));
} catch (IOException e) {
logger.error(e.toString());
}
});
});
}
/**
* 获取搜索的商品
*/
public static GoodsEsResp getGoods(Long goodsId) {
GoodsEsResp goodsEsResp = new GoodsEsResp();
RestClient restClient = getRestClient();
String method = "GET";
String endpoint = "/" + elasticIndex + "/elasticsearch/_search";
HttpEntity entity = new NStringEntity("{\n" +
" \"query\": {\n" +
" \"match\": {\n" +
" \"id\":" + goodsId + "\n" +
" }\n" +
" }\n" +
"}", ContentType.APPLICATION_JSON);
Response response = null;
try {
response = restClient.performRequest(method, endpoint, Collections.<String, String>emptyMap(), entity);
JSONObject jsonObject = JSON.parseObject(EntityUtils.toString(response.getEntity()));
Object hits = jsonObject.get("hits");
JSONArray jsonArray = (JSONArray) ((JSONObject) hits).get("hits");
List<String> esIds = new ArrayList<>();
jsonArray.forEach(o -> {
String esId = (String) ((JSONObject) o).get("_id");
if (StringUtils.isNotBlank(esId)) {
esIds.add(esId);
}
});
goodsEsResp.setEsIds(esIds);
logger.info(JSON.toJSONString(response));
} catch (IOException e) {
logger.error(e.toString());
}
return goodsEsResp;
}
public String getElasticHostName() {
return elasticHostName;
}
@Value("${aliyun_elasticsearch_host}")
public void setElasticHostName(String elasticHostName) {
ElasticsearchUtils.elasticHostName = elasticHostName;
}
public String getElasticUserName() {
return elasticUserName;
}
@Value("${aliyun_elasticsearch_username}")
public void setElasticUserName(String elasticUserName) {
ElasticsearchUtils.elasticUserName = elasticUserName;
}
public String getElasticPassword() {
return elasticPassword;
}
@Value("${aliyun_elasticsearch_password}")
public void setElasticPassword(String elasticPassword) {
ElasticsearchUtils.elasticPassword = elasticPassword;
}
public String getElasticIndex() {
return elasticIndex;
}
@Value("${aliyun_elasticsearch_index}")
public void setElasticIndex(String elasticIndex) {
ElasticsearchUtils.elasticIndex = elasticIndex;
}
}
指定ID代替自动生成的_id可以节省一次查询
# 添加数据
POST /index_test/type_test/127
{
"id":127,
"name":"测试",
"picture":"//yixiulian.oss-cn-shenzhen.aliyuncs.com/youpin/storage/376b74064cfeba5eff83b13ec24a269a.jpg",
"seo_title": "",
"seo_keywords": ""
}
查询所有:

# id查询数据
GET /index_test/type_test/127
批量同步
DataWorks定时同步数据库的数据到ES
一个index 对应多个type:
PUT /index_test4
{
"mappings":{
"type_1":{
"_all" : {"enabled" : true},
"properties":{
"field_1":{ "type":"string"},
"field_2":{ "type":"long"}
}
},
"type_2":{
"properties":{
"field_3":{ "type":"string"},
"field_4":{ "type":"date"}
}
}
}
}
阿里云 elasticsearch 增删改查的更多相关文章
- elasticsearch增删改查crudp-----1
Elasticsearch一些增删改查的总结 环境Centos7+Es 5.x 简单介绍下ES的原理: 1,索引 --相当于传统关系型数据库的database或schema 2,类型 --相当于传 ...
- elasticsearch 增删改查底层原理
elasticsearch专栏:https://www.cnblogs.com/hello-shf/category/1550315.html 一.预备知识 在对document的curd进行深度分析 ...
- Elasticsearch增删改查 之 —— mget多文档查询
之前说过了针对单一文档的增删改查,基本也算是达到了一个基本数据库的功能.本篇主要描述的是多文档的查询,通过这个查询语法,可以根据多个文档的查询条件,返回多个文档集合. 更多内容可以参考我整理的ELK文 ...
- ES 17 - (底层原理) Elasticsearch增删改查索引数据的过程
目录 1 增删改document的流程 1.1 协调节点 - Coordinating Node 1.2 增删改document的流程 2 查询document的流程 1 增删改document的流程 ...
- Elasticsearch增删改查 之 —— Get查询
GET API是Elasticsearch中常用的操作,一般用于验证文档是否存在:或者执行CURD中的文档查询.与检索不同的是,GET查询是实时查询,可以实时查询到索引结果.而检索则是需要经过处理,一 ...
- Elasticsearch增删改查 之 —— Delete删除
删除文档也算是常用的操作了...如果把Elasticsearch当做一款普通的数据库,那么删除操作自然就很常用了.如果仅仅是全文检索,可能就不会太常用到删除. Delete API 删除API,可以根 ...
- Java之Elasticsearch 增删改查
<!--ELK --> <dependency> <groupId>org.elasticsearch.client</groupId> <art ...
- elasticsearch增删改查操作
目录 1. 插入数据 2. 更改数据 3. 删除数据 4. 检索文档 1. 插入数据 关于下面的代码如何使用,可以借助于kibana的console,浏览器打开地址: http://xxx.xxx.x ...
- ElasticSearch 增删改查
HTTP 协议本身语义:GET 获取资源.POST 新建资源(也可以用于更新资源).PUT 更新资源.DELETE 删除资源. ES通过HTTP Restful方式管理数据:1.格式:#操作 /ind ...
随机推荐
- mybatis之动态SQL操作之删除
/** * 持久层 */ public class StudentDao { /** * 动态SQL--删除 */ public void dynaSQLwithDelete(int... ids) ...
- 配置了configuration.xml之后提示找不到映射关系
在启动类里面单独增加一个Bean即可解决 @Bean public DatabaseIdProvider getDatabaseIdProvider(){ DatabaseIdProvider dat ...
- kettle在linux下面用于shell脚本执行:转换或者作业
1 将windows下面创建好的转换,放到Linux某一个文件夹下面.如:把0816_em.ktr文件放到/home/cfj/kettle/testdemo下面. 注意里面的数据库用户名和密码可能需要 ...
- TextInput组件的常用属性
1.TextInput组件基本介绍: TextInput是一个允许用户在应用中通过键盘输入文本的基本组件.本组件的属性提供了多种特性的配置,譬如自动完成.自动大小写.占位文字,以及多种不同的键盘类型( ...
- 那些年踩过的坑之Redis报错:All sentinels down, cannot determine where is mymaster master is running...
1. 异常信息: All sentinels down, cannot determine where is mymaster master is running... 通过测试: @Test pub ...
- SGI STL内存管理
前言 万丈高楼平地起,内存管理在C++领域里扮演着举足轻重的作用.对于SGI STL这么重量级的作品,当然少不了内存管理的实现.同时,想要从深层次理解SGI STL的原理,必须先将内存管理这部分的内容 ...
- [转帖]Nginx 容器教程
Nginx 容器教程 http://www.ruanyifeng.com/blog/2018/02/nginx-docker.html 里面有证书. 作者: 阮一峰 日期: 2018年2月27日 感谢 ...
- spring-boot 使用jdk6(三)
环境 jdk 6 tomcat 7.0.59 sts 4.4.2 maven 3.2.5 背景 由于环境限制,还在使用 JDK6,所以需要将 spring boot 进行配置,支持JDK6. 以下所有 ...
- 输出1-n的全排列dfs
https://ac.nowcoder.com/acm/contest/998/C #include<stdio.h> #include<iostream> #include ...
- Codeforces Round #586 (Div. 1 + Div. 2) D.Alex and Julian 简单证明
题意:在序列中删除最少元素使得得到的图是二分图. 其中点是整数域的点. 比如b1=2 那么a可以连b当且仅当|a-b|=2 同时这里的a,b是任意整数. 怎样判定一个序列是否合法呢?于是想到了二分 ...