elasticsearch-java操作

ElasticSearch做分布式的搜索引擎练习

需要导入的pom文件

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!--引入es的坐标-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.4.0</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.4.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>

    </dependencies>

application.yaml文件

elasticsearch:
  host: 127.0.0.1
  port: 9200

启动类创建

package com.atguigu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ElasticsearchDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(ElasticsearchDemoApplication.class, args);
    }

}

创建一个客户端的类

import lombok.Data;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Data
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticSearchConfig {
    private Integer port;
    private String host;
    //注册一个客户端
    @Bean
    public RestHighLevelClient client(){
        return new RestHighLevelClient(RestClient.builder(new HttpHost(host,port,"http")));
    }
}

创建一个JavaBean对象

@Data
public class Person implements Serializable {
    private Integer age;
    private String name;
    private String address;
   // private Integer id;

}

创建一个测试类进行增删改查索引,文档,以及进行批量添加删除等操作

@SpringBootTest
@RunWith(SpringRunner.class)
public class ElasticSearchTest {
    //导入客户端
    @Autowired
    private RestHighLevelClient client;

    /**
     * 创建索引
     * @throws Exception
     */
    @Test
    public void test1()throws Exception{
        //获取操作索引的对象
        IndicesClient indices = client.indices();
        //创建索引的请求
        CreateIndexRequest request = new CreateIndexRequest("abc");
        //利用索引的对象创建索引
        CreateIndexResponse createIndexResponse = indices.create(request, RequestOptions.DEFAULT);
        //创建完成返回结果
        System.out.println(createIndexResponse.isAcknowledged());

    }

    /**
     * 添加索引与映射
     */
    @Test
    public void test2()throws Exception{
    //获取索引创建对象
        IndicesClient indices = client.indices();
        //创建请求
        CreateIndexRequest indexRequest = new CreateIndexRequest("aaa");
        //将映射放进请求
        String mapping="{\n" +
                "      \"properties\" : {\n" +
                "        \"address\" : {\n" +
                "          \"type\" : \"text\",\n" +
                "          \"analyzer\" : \"ik_max_word\"\n" +
                "        },\n" +
                "        \"age\" : {\n" +
                "          \"type\" : \"long\"\n" +
                "        },\n" +
                "        \"name\" : {\n" +
                "          \"type\" : \"keyword\"\n" +
                "        }\n" +
                "      }\n" +
                "    }";
        indexRequest.mapping(mapping, XContentType.JSON);
        //创建索引以及映射
        CreateIndexResponse createIndexResponse = indices.create(indexRequest, RequestOptions.DEFAULT);
        System.out.println(createIndexResponse.isAcknowledged());
    }

    /**
     * 查询索引
     */
    @Test
    public void test3()throws Exception{
        //创建索引对象
        IndicesClient indices = client.indices();
        //创建查询索引请求
        GetIndexRequest getIndexRequest = new GetIndexRequest("aaa");
        //发送请求
        GetIndexResponse indexResponse = indices.get(getIndexRequest, RequestOptions.DEFAULT);
        //遍历请求的参数
        Map<String, MappingMetaData> mappings = indexResponse.getMappings();
        Set<Map.Entry<String, MappingMetaData>> entries = mappings.entrySet();
        for (Map.Entry<String, MappingMetaData> entry : entries) {
            System.out.println(entry.getKey());
            System.out.println(mappings.get(entry.getKey()).getSourceAsMap());
        }
    }

    /**
     * 删除索引
     */
    @Test
    public void test4()throws Exception{
        //创建操作索引的对象
        IndicesClient indices = client.indices();
        //创建删除索引请求
        DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest("abc");
        //发送请求进行删除
        AcknowledgedResponse delete = indices.delete(deleteIndexRequest, RequestOptions.DEFAULT);
        System.out.println(delete.isAcknowledged());
    }

    /**
     * 判断索引是否存在
     */
    @Test
    public void test5()throws Exception{
        IndicesClient indices = client.indices();
        GetIndexRequest getIndexRequest = new GetIndexRequest("abc");
        boolean exists = indices.exists(getIndexRequest, RequestOptions.DEFAULT);
        System.out.println("exists = " + exists);
    }

    /**
     * 添加文档数据
     * @throws Exception
     */
    @Test
    public void test6()throws Exception{
        //创建一个map集合存数据
        Map map = new HashMap();
        map.put("name","小红");
        map.put("age",55);
        map.put("address","佛山");
        //获取文档对象并添加数据
        IndexRequest indexRequest = new IndexRequest("aaa").id("1").source(map);
        //利用客户端发送请求
        IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(indexResponse.getId());

    }

    /**
     * 利用JavaBean发送请求创建文档/修改文档
     */
    @Test
    public void test7()throws Exception{
        Person person = new Person();
        person.setAddress("北京");
        person.setAge(56);
        person.setName("小亮");
       // person.setId(2);
      //将对象转成json格式
        String s = JSON.toJSONString(person);
        // 创建文档对象并添加数据
        IndexRequest indexRequest = new IndexRequest("aaa").id("3").source(s,XContentType.JSON);
        //发送请求
        IndexResponse index = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(index.getId());
    }

    /**
     * 利用id进行查询
     * @throws Exception
     */
    @Test
    public void test8()throws Exception{
        //创建查询id请求
        GetRequest getRequest = new GetRequest("aaa", "2");
        //发送请求
        GetResponse response = client.get(getRequest, RequestOptions.DEFAULT);
        String sourceAsString = response.getSourceAsString();
        System.out.println( sourceAsString);
    }

    /**
     * 删除文档
     * @throws Exception
     */
    @Test
    public void test9()throws Exception{
        //创建删除请求
        DeleteRequest deleteRequest = new DeleteRequest("aaa", "2");
        DeleteResponse response = client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(response.getId());
    }

    /**
     * 批量操作
     * @throws Exception
     */
    @Test
    public void test10()throws Exception{
        //创建绑定对象请求
        BulkRequest bulkRequest = new BulkRequest();
        //创建增删改的请求
        Person person = new Person();
        person.setName("小米");
        person.setAge(33);
        person.setAddress("天津");
        String string1 = JSON.toJSONString(person);
        IndexRequest put = new IndexRequest("aaa").id("2").source(string1,XContentType.JSON);
        bulkRequest.add(put);

        DeleteRequest deleteRequest = new DeleteRequest("aaa", "1");
        bulkRequest.add(deleteRequest);
/*
        Person person1 = new Person();
        person.setName("小黄");
        String string = JSON.toJSONString(person1);*/
         Map map=new HashMap();
         map.put("name","小黄");
        UpdateRequest updateRequest = new UpdateRequest("aaa", "3").doc(map);
        bulkRequest.add(updateRequest);

        BulkResponse bulk = client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.status());


    }
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容