Elasticsearch5.2.1的文档API操作

来源:互联网 发布:淘宝邻家好货怎么设置 编辑:程序博客网 时间:2024/06/16 11:14

文档API

单文档API

  • 创建索引
  • 获取索引
  • 删除索引
  • 更新索引

多文档API

  • 获取多个文档
  • 批量操作
  • 通过查询API删除文档
  • 通过查询API更新文档
  • 重建索引

所有的CRUD API都是单个索引的api。索引只接收一个索引名称,或者一个指向某个具体索引的索引别名。


下面的操作都可以通过kibana中的dev-tool来完成,如下图

这里写图片描述

创建索引

PUT twitter/tweet/1{    "user" : "kimchy",    "post_date" : "2009-11-15T14:12:12",    "message" : "trying out Elasticsearch"}

响应结果:

{    "_shards" : {        "total" : 2, #在几个分片中进行查找(包括主分片和复制分片)        "failed" : 0, #查询失败的分片数        "successful" : 2 #查询成功的分片数    },    "_index" : "twitter",    "_type" : "tweet",    "_id" : "1",    "_version" : 1,    "created" : true,    "result" : created}

动态创建索引

当我们在创建一个文档的时候,elasticsearch或默认帮我们创建索引和类型。索引类型的模式非常灵活,当我们新增一个字段的时候,会默认帮我们添加一个类型映射。(基本数据类型可以采用这个方法)

我们能够关闭索引的自动创建,我们只需要在配置文件(elasticsearch.yaml)中修改如下配置(集群中的所有配置必须保持一致):

action.auto_create_index : false

当然我们也能够关闭类型的自动创建,也只需要增加一个配置即可:

ndex.mapper.dynamic : false

其中,更为灵活的是,我们可以通过一个匹配模式来设定自定义的自动索引创建,比如:

action.auto_create_index :+aaa*,-bbb*,+ccc*,-(+表示允许,-表示不允许,表示前缀后缀匹配)

创建索引的java实现

因为版本的升级,maven引入依赖的jar包也发生了变化,我们需要引入下面两个pom:

<dependency>    <groupId>org.elasticsearch.client</groupId>    <artifactId>transport</artifactId>    <version>5.2.1</version></dependency><dependency>    <groupId>org.elasticsearch</groupId>    <artifactId>elasticsearch</artifactId>    <version>5.2.1</version></dependency>

创建client

  TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));

我们对比发现,我们之前都是直接创建TransportClient的示例,但是这个类在5.2版本就变成一个抽象类。所以只能示例它的子类PreBuiltTransportClient。

如果我们想创建一个文档,elasticsearch给我们提供了四种方式来构建一个文档的途径:

  • 手动拼接一个json字符串
  • 使用map来添加内容,然后将map转换成json
  • 使用第三方json工具包,如jackson将对应的bean转换成json
  • 使用elasticsearch内置的XContentFactory来构建json

下面是四种方式的具体实现

   @Before    public void setUp() throws UnknownHostException {        TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));    }    @Test    public void testUseJsonStr() {        String json = "{" +                "\"user\":\"kimchy\"," +                "\"postDate\":\"2013-01-30\"," +                "\"message\":\"trying out Elasticsearch\"" +                "}";        client.prepareIndex("twitter", "tweet", "1")                .setSource(json)                .get();    }    @Test    public void testUseMap(){        Map<String, Object> json = new HashMap<String, Object>();        json.put("user","kimchy");        json.put("postDate",new Date());        json.put("message","trying out Elasticsearch");        client.prepareIndex("twitter", "tweet", "2")                .setSource(json)                .get();    }    @Test    public void  testUseXContentFactory() throws IOException {        IndexResponse response = client.prepareIndex("twitter", "tweet", "3")                .setSource(                        XContentFactory.jsonBuilder()                                .startObject()                                .field("user", "kimchy")                                .field("postDate", new Date())                                .field("message", "trying out Elasticsearch")                                .endObject()                )                .get();    }    @Test    public void testUseJackson() throws JsonProcessingException {        Tweet tweet = new Tweet("kimchy",new Date(),"trying out Elasticsearch");        ObjectMapper mapper = new ObjectMapper();        byte[] json = mapper.writeValueAsBytes(tweet);        client.prepareIndex("twitter", "tweet", "4")                .setSource(json)                .get();    }    class Tweet{        private String user;        private Date postDate;        private String message;        public String getUser() {            return user;        }        public void setUser(String user) {            this.user = user;        }        public Date getPostDate() {            return postDate;        }        public void setPostDate(Date postDate) {            this.postDate = postDate;        }        public String getMessage() {            return message;        }        public void setMessage(String message) {            this.message = message;        }        public Tweet(String user, Date postDate, String message) {            this.user = user;            this.postDate = postDate;            this.message = message;        }    }
1 0
原创粉丝点击