java操作es

一.添加索引库

1.步骤

1.创建一个java工程。

2.添加jar包,导入maven坐标。

3.编写测试方法实现创建索引库。

3.1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。

3.2创建一个客户端Client对象。

3.3使用Client对象创建一个索引库。

3.4关闭Client对象。

2.代码块

(1)pom依赖

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.24</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.6</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>

(2)ESClientDemo01客户端类

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;

import java.net.InetAddress;

public class ESClientDemo01 {

    @Test
    public void createIndex()throws Exception{
//        1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
        Settings settings = Settings.builder()
                //put参数1是配置名称,参数2是配置值
                .put("cluster.name","my-elasticsearch")
                .build();
//        2创建一个客户端Client对象。
        TransportClient client = new PreBuiltTransportClient(settings);
        //2.2 获取集群的节点列表
        //2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3使用Client对象创建一个索引库。
        //设置索引库名称
        client.admin().indices().prepareCreate("index_hello")
                //执行操作
                .get();
//        4关闭Client对象。
        client.close();
    }

}

3.范例

图片

二.添加mapping映射

1.步骤

  1. 创建一个settings对象。
  2. 创建一个client对象。
  3. 创建一个mappings信息,可以是json数据,也可以是字符串,也可以说XContextBuilder。
  4. 使用client像es服务器发送mapping信息
  5. 关闭client对象。

2.代码块

 @Test
    /**
     * 添加mapping映射
     */
    public void setMappings()throws Exception{
//        1.创建一个settings对象。
        Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
//        2.创建一个client对象。
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3.创建一个mappings信息,可以是json数据,也可以是字符串,也可以说XContextBuilder。
        //3.1 从XContentFactory工厂对象获取一个json格式的XContentBuilder对象
        /*
        {
                "article":{
                "properties":{
                    "id":{
                        "type":"long",
                                "store":true
                    },
                    "title":{
                        "type":"text",
                                "store":true,
                                "index":true,
                                "analyzer":"ik_smart"
                    },
                    "content":{
                        "type":"text",
                                "store":true,
                                "index":true,
                                "analyzer":"ik_smart"
                    }
                }
            }
        }
         */
        XContentBuilder builder = XContentFactory.jsonBuilder()
                //设置最外围{
                .startObject()
                    .startObject("article")//设置article:{
                        .startObject("properties")//设置properties:{
                            .startObject("id")//设置id:{
                                .field("type","long")//设置域
                                .field("store",true)
                            .endObject()//设置结束标记 }
                            .startObject("title")
                                .field("type","text")
                                .field("store",true)
                                .field("index",true)
                                .field("analyzer","ik_smart")
                            .endObject()
                            .startObject("context")
                                .field("type","text")
                                .field("index",true)
                                .field("analyzer","ik_smart")
                            .endObject()
                        .endObject()
                    .endObject()
                .endObject();
//        4.使用client像es服务器发送mapping信息
        client.admin().indices()
                //设置索引库
                .preparePutMapping("index_hello")
                //设置type
                .setType("article")
                //设置mapping映射,可以字符串形式、json形式、XContentBuilder形式
                .setSource(builder)
                //执行操作
                .get();
//        5.关闭client对象。
        client.close();
    }
}

3.范例

图片

图片

图片

三.添加文档对象【方式一】

1.步骤

1.创建一个settings对象。

2.创建一个client对象。

3.创建一个文档对象

4.使用client像es服务器发送文档对象

5.关闭client对象

2.代码块

 @Test
    /**
     * 添加文档对象
     */
    public void setMappings2()throws Exception{
//        1.创建一个settings对象。
        Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
//        2.创建一个client对象。
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
        //3.创建一个文档对象
        XContentBuilder builder = XContentFactory.jsonBuilder()
                .startObject()
                    .field("id",1l)//l是数据类型,1l是指数值为1,数据类型为long
                    .field("title","这是添加的新文档")
                    .field("content","这是文档的内容。。。。")
                .endObject();
        //4.使用client像es服务器发送文档对象
        client.prepareIndex()
            .setIndex("index_hello")//设置索引库
            .setType("article")//设置type
            .setId("1")//设置文档真实id
            .setSource(builder)//设置文档对象
            .get();//执行操作
        //5.关闭client对象
        client.close();
    }

}

3.范例

图片

四.添加文档对象【方式二】

1.步骤

0.定义一个Article对象类。

1.创建一个settings对象。

2.创建一个client对象。

3.创建一个Article对象

4.设置对象属性

5.将Article对象转换为json格式的字符串

6.使用client对象把Article对象传入索引库

7.关闭客户端

2.代码块

(1)对象类

public class Article {
    private long id;
    private String title;
    private String context;

    public Article() {
    }

    @Override
    public String toString() {
        return "Article{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", context='" + context + '\'' +
                '}';
    }

    public Article(long id, String title, String context) {
        this.id = id;
        this.title = title;
        this.context = context;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getContext() {
        return context;
    }

    public void setContext(String context) {
        this.context = context;
    }

}

(2)测试类方法

 @Test
    /**
     * 添加文档对象方式二
     */
    public void setMappings3()throws Exception{
//        1.创建一个settings对象。
        Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
//        2.创建一个client对象。
        TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
        //3.创建一个Article对象
        Article article = new Article();
        //4.设置对象属性
        article.setId(1l);
        article.setTitle("这是新建的文档对象2");
        article.setContext("这是文档对象2的内容。。。");
        //5.将Article对象转换为json格式的字符串
        ObjectMapper objectMapper = new ObjectMapper();//该方法需要导入jackJson依赖
        String json = objectMapper.writeValueAsString(article);
        System.out.println(json);
        //6.使用client对象把Article对象传入索引库
        client.prepareIndex("index_hello","article","2")//参数1是索引库,参数2是type,参数3是真实id
                .setSource(json, XContentType.JSON)//参数1是json数据,参数2是数据类型
                .get();
        //7.关闭客户端
        client.close();

}

(3)pom依赖

<groupId>org.example</groupId>
<artifactId>demo01</artifactId>
<version>1.0-SNAPSHOT</version>

<properties>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>

<dependencies>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>5.6.8</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-to-slf4j</artifactId>
        <version>2.9.1</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.24</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.12</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.6</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>RELEASE</version>
        <scope>compile</scope>

3.范例

(1)对象类

图片

(2)测试类

图片

五.根据id进行查询

1.步骤

  1. 创建一个client对象。
  2. 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【idsQuery对象获取QueryBuilder】
  3. 使用client执行查询。
  4. 得到查询的结果。
  5. 取查询结果的总记录。
  6. 取查询结果列表。
  7. 关闭client对象。

2.代码块

    @Test
    /*
    查询结果
     */
    public void testSearchById()throws Exception{
        //        1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
        Settings settings = Settings.builder()
                //put参数1是配置名称,参数2是配置值
                .put("cluster.name","my-elasticsearch")
                .build();
//        2创建一个客户端Client对象。
        TransportClient client = new PreBuiltTransportClient(settings);
        //2.2 获取集群的节点列表
        //2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
        QueryBuilder queryBuilder = QueryBuilders
                .idsQuery()
                .addIds("1","2");
//        4.使用client执行查询。
        SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
                .setTypes("article")//查询的type
                .setQuery(queryBuilder)//查询条件
                .get();//执行查询
//        5.得到查询的结果集。
        SearchHits hits = searchResponse.getHits();
//        6.取查询结果的总记录。
        System.out.println("查询结果的总记录:" + hits.getTotalHits());
//        7.取查询结果列表。
        //7.1获取查询结果的迭代器
        Iterator<SearchHit> iterator = hits.iterator();
        //7.2遍历迭代器
        while(iterator.hasNext()){
            SearchHit searchHit = iterator.next();
            System.out.println("------------获取字符串形式的文档对象数据---------");
            System.out.println("查询的结果为:" + searchHit.getSourceAsString());
            System.out.println("--------获取文档的属性---------");
            Map<String, Object> document = searchHit.getSource();//获取map集合
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("content"));
        }
//        8.关闭client对象。
        client.close();

}

3.范例

图片

图片

六.根据term进行查询【关键词查询】

1.步骤

  1. 创建一个client对象。
  2. 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【termQuery对象获取QueryBuilder】
  3. 使用client执行查询。
  4. 得到查询的结果。
  5. 取查询结果的总记录。
  6. 取查询结果列表。
  7. 关闭client对象。

2.代码块

 @Test
    /*
    根据关键词查询结果
     */
    public void testQueryByTerm()throws Exception{
        //        1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
        Settings settings = Settings.builder()
                //put参数1是配置名称,参数2是配置值
                .put("cluster.name","my-elasticsearch")
                .build();
//        2创建一个客户端Client对象。
        TransportClient client = new PreBuiltTransportClient(settings);
        //2.2 获取集群的节点列表
        //2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
        QueryBuilder queryBuilder = QueryBuilders
                .termQuery("title","对象");//参数1是要搜索的域,参数2是关键词
//        4.使用client执行查询。
        SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
                .setTypes("article")//查询的type
                .setQuery(queryBuilder)//查询条件
                .get();//执行查询
//        5.得到查询的结果集。
        SearchHits hits = searchResponse.getHits();
//        6.取查询结果的总记录。
        System.out.println("查询结果的总记录:" + hits.getTotalHits());
//        7.取查询结果列表。
        //7.1获取查询结果的迭代器
        Iterator<SearchHit> iterator = hits.iterator();
        //7.2遍历迭代器
        while(iterator.hasNext()){
            SearchHit searchHit = iterator.next();
            System.out.println("------------获取字符串形式的文档对象数据---------");
            System.out.println("查询的结果为:" + searchHit.getSourceAsString());
            System.out.println("--------获取文档的属性---------");
            Map<String, Object> document = searchHit.getSource();//获取map集合
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("context"));
        }
//        8.关闭client对象。
        client.close();

}

3.范例

图片

图片

七.根据queryString进行查询【字符串查询(先分词后查询)】

1.步骤

  1. 创建一个client对象。
  2. 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【queryStringQuery对象获取QueryBuilder】
  3. 使用client执行查询。
  4. 得到查询的结果。
  5. 取查询结果的总记录。
  6. 取查询结果列表。
  7. 关闭client对象。

2.代码块

@Test
    /*
    根据字符串进行查询
     */
    public void testQueryStrings()throws Exception{
//        1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
        Settings settings = Settings.builder()
                //put参数1是配置名称,参数2是配置值
                .put("cluster.name","my-elasticsearch")
                .build();
//        2创建一个客户端Client对象。
        TransportClient client = new PreBuiltTransportClient(settings);
        //2.2 获取集群的节点列表
        //2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//        3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
        QueryBuilder queryBuilder = QueryBuilders
                .queryStringQuery("文档对象2")//根据字符串进行创建QueryBuilder对象
                .defaultField("title");//设置默认搜索域【field】
//        4.使用client执行查询。
        SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
                .setTypes("article")//查询的type
                .setQuery(queryBuilder)//查询条件
                .get();//执行查询
//        5.得到查询的结果集。
        SearchHits hits = searchResponse.getHits();
//        6.取查询结果的总记录。
        System.out.println("查询结果的总记录:" + hits.getTotalHits());
//        7.取查询结果列表。
        //7.1获取查询结果的迭代器
        Iterator<SearchHit> iterator = hits.iterator();
        //7.2遍历迭代器
        while(iterator.hasNext()){
            SearchHit searchHit = iterator.next();
            System.out.println("------------获取字符串形式的文档对象数据---------");
            System.out.println("查询的结果为:" + searchHit.getSourceAsString());
            System.out.println("--------获取文档的属性---------");
            Map<String, Object> document = searchHit.getSource();//获取map集合
            System.out.println(document.get("id"));
            System.out.println(document.get("title"));
            System.out.println(document.get("context"));
        }
//        8.关闭client对象。
        client.close();

}

3.范例

图片

图片

八.源码

Elasticsearch.rar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值