其他分享
首页 > 其他分享> > elasticsearch的入门级CRUD

elasticsearch的入门级CRUD

作者:互联网

文章目录


前言

本文主要介绍如何使用java API 对Elasticsearch进行CRUD


一、Elasticsearch是什么?

Elasticsearch是一个基于Lucene 的分布式的搜索引擎,我们可以通过Rest接口进行操作。

二、角色

三、使用步骤

1.创建索引 index

		//集群名称
        Settings settings = Settings.builder().put("cluster.name", "my_app").build();
        //客户端建立
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));//9300默认服务端口
        //客户端发送请求,创建索引
        client.admin().indices().prepareCreate("user").get();
        //关闭客户端
        client.close();

2.建立映射 mapping(文档结构)

        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                .startObject("info")
                .startObject("properties")
                .startObject("id")
                .field("type", "integer")
                .field("store", "yes")
                .endObject()
                .startObject("name")
                .field("type", "string")
                .field("store", "yes")
                .field("analyzer", "ik_smart")//ik_smart中文分词
                .endObject()
                .startObject("introduction")
                .field("type", "string")
                .field("store", "yes")
                .field("analyzer", "ik_smart")
                .endObject()
                .endObject()
                .endObject()
                .endObject();
        PutMappingRequest mapping = Requests.putMappingRequest("user")
                .type("info").source(builder);
         /**
         	当你使用postman等进行测试时,使用9200端口(web平台端口),而使用java api发送请求数据使用9300端口
         	以上的api操作对应的Rest请求为:
        	curl -XPUT http://127.0.0.1:9200/user
        	请求体:
        	{
				"mapping": {
					"info": {
						"properties": {
							"id": { 
								"type": "intger", 
								"store": true, 
								"index":"not_analyzed" 
							},
							"name": { 
								"type": "text", 
								"store": true, 
								"index":"analyzed", 
								"analyzer":"ik_smart" 
							},
							"introduction": { 
								"type": "text", 
								"store": true, 
								"index":"analyzed", 
								"analyzer":"ik_smart" 
							}
						}
					}
				}
				
			}
         */
         //客户端发送请求
        client.admin().indices().putMapping(mapping).get();
        client.close();

3.文档 document 的 CRUD

创建文档

        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                .field("id", 27)
                .field("name", "张三")
                .field("introduction", "他是中国人")
                .endObject();
        Settings settings = Settings.builder().put("cluster.name", "my_app").build();
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        //发送客户端请求
        client.prepareIndex()
                .setIndex("user")
                .setType("info")
                .setId("1")
                .setSource(builder)
                .get();
         /**
         	以上的api操作对应的Rest请求为:
         	curl -XPUT http://127.0.0.1:9200/user/info/1
         	请求体:
         	{
			  "id": 1,
			  "name": "张三",
			  "introduction": "He is Chinese"
			}
         */
        client.close();

以上的方式看似很多,但是万变不离其宗,就是先将内容变成json字符串形式,之后再放入请求体内发送。


查询文档

GetResponse responseGet = client.prepareGet("user", "info", "1").get();

相应Rest请求:Get user/info/1


删除文档

DeleteResponse responseDel = client.prepareDelete("user", "info", "1").get();

相应Rest请求:DELETE user/info/1


更新文档

        UpdateRequest updateRequest = new UpdateRequest();
        updateRequest.index("user");
        updateRequest.type("info");
        updateRequest.id("1");
        updateRequest.doc(XContentFactory.jsonBuilder()
                .startObject()
                .field("name", "李四")
                .endObject());
        client.update(updateRequest).get();
        client.close();

相应Rest请求:

POST /user/_update/1
{
     "info": {
       "name": "李四"
      }
}

批处理

        BulkRequestBuilder bulkRequestBuilder = client.prepareBulk();
        Map<String,Object> map = new HashMap<>();
        map.put("name","王五");
        map.put("introduction","he name is wangwu");
        bulkRequestBuilder.add(client.prepareIndex("user","info","7").setSource(map));
        map.clear();
		map.put("name","赵六");
        map.put("introduction","he name is zhaoliu");
        bulkRequestBuilder.add(client.prepareIndex("user","info","8").setSource(map));
        bulkRequestBuilder.get();
        client.close();

相应Rest请求:

POST _bulk
{ "index" : { "user" : "info", "_id": 7} }
{"name":"王五","introduction":"he name is wangwu"}
{ "index" : { "user" : "info", "_id": 8 }}
{"name":"赵六","introduction":"he name is zhaoliu"}

总结

>>elasticsearch官方其实对自己的产品有非常好的对待菜鸟的教程>>
关于elastic的api非常多,但只要理解了核心概念,我们就可以借助文档轻松入门运用。本文只是简单的去说明java各个api对应的Rest请求是什么样子。

标签:info,name,field,CRUD,入门级,client,elasticsearch,user,文档
来源: https://blog.csdn.net/weixin_45799833/article/details/119281817