阿里云 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 ...
随机推荐
- LC 975. Odd Even Jump
You are given an integer array A. From some starting index, you can make a series of jumps. The (1 ...
- grivaty,margin和padding的区别
layout_margn是指组件距离父窗体的距离, padding是指组件中的内容距离组件边缘的距离 Layout_grivaty与grivaty的区别 layout_grivaty是指组件相对父窗体 ...
- NoSQL的种类
https://www.zhihu.com/question/30219620
- 一百一十六:CMS系统之使用阿里大于sdk发送短信验证码
阿里大于短信平台:https://dysms.console.aliyun.com/dysms.htm#/overview 使用教程:https://blog.csdn.net/qq103189393 ...
- vlc的流输出功能
vlc的流输出功能 流输出功能,可以将vlc读取到的流,输出到文件或者通过网络发送,客户端可以使用http.rtp.rtsp等协议访问,还可以进行转码等操作. 参考http://wiki.videol ...
- Linux命令集锦:ansible命令
ansible 命令主要用于批量管理,来实现自动化管理.常用批量操作包括:主机分组管理.实时批量执行命令或脚本.实时批量分发文件或目录.定时同步文件等. 一.安装 ansible yum instal ...
- 第一个React Native项目
1>下图操作创建第一个React Native项目: 用Xcode运行界面如下: 记住: 在使用项目文件期间,终端记住不要关闭的哟!!! 改变了程序代码,需要刷新运行,使用快捷键: Comman ...
- 线程池小结(JDK8)
1.线程池的好处 降低资源消耗(重复利用已创建的线程减少创建和销毁线程的开销) 提高响应速度(无须创建线程) 提高线程的可管理性 2.相关类图 JDK5以后将工作单元和执行机制分离开来,工作单元包括R ...
- SVN 服务器 配置
1.目录结构 2.用户分配 3.目录权限 4.linux下的SVN服务器 5.配置svnserver.conf 注意左边不要有空格 注意文件的权限 chmod -R 777 /opt/svn/blue ...
- DEVOPS ROADMAP