Elasticsearch学习3《6.x版本 - Java操作elasticsearch》

一、JAVA连接ES

1、添加依赖

        <!-- elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>6.5.4</version>
        </dependency>
        <!-- elasticsearch高级API -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>6.5.4</version>
        </dependency>
        <!-- junit测试 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <!--provided:编译期有效-->
            <scope>provided</scope>
        </dependency>

2、在utils目录下创建EsClient 类

创建EsClient 连接

注意:需要先打开elasticsearch,然后配置下面的host连接

public class EsClient {

    public static RestHighLevelClient getClient(){
        //  创建 HttpHost
        HttpHost httpHost = new HttpHost("127.0.0.1",9200);

        // 创建 RestClientBuilder
        RestClientBuilder builder = RestClient.builder(httpHost);

        // 创建 RestHighLevelClient
        RestHighLevelClient client = new RestHighLevelClient(builder);

        return client;
    }
}

3、在test类中测试

	@Test
    public void testConnect() {
        try {
            RestHighLevelClient client = ESClient.getClient();
            System.out.println("ok!");
        } catch (Exception e) {
            System.out.println(e);
        }
    }

连接成功:

在这里插入图片描述

二、索引

1、创建索引

	RestHighLevelClient client =  EsClient.getClient();
    String index = "person";
    String type="man";

    @Test
    public void createIndx() throws Exception{
        // 1.准备关于索引的setting
        Settings.Builder settings = Settings.builder()
                .put("number_of_shards", 2)     //指定索引的分片数
                .put("number_of_replicas", 1);  //指定索引的备份数

        // 2.准备关于索引的mapping
        XContentBuilder mappings = JsonXContent.contentBuilder()
                .startObject()
                    .startObject("properties")
                        .startObject("name")
                            .field("type", "text")
                        .endObject()
                        .startObject("age")
                            .field("type", "integer")
                        .endObject()
                        .startObject("birthday")
                            .field("type", "date")
                            .field("format", "yyyy-MM-dd")
                        .endObject()
                    .endObject()
                .endObject();

        // 3.将settings和mappings 封装到到一个Request对象中
        CreateIndexRequest request = new CreateIndexRequest(index)
                .settings(settings)
                .mapping(type,mappings);

        // 4.使用client 去连接ES
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);

        System.out.println("response:"+response.toString());
    }

2、效果

在这里插入图片描述

3、删除索引

    //删除索引
   	RestHighLevelClient client =  EsClient.getClient();
    String index = "person";
    String type="man";
    
    @Test
    public void deleteIndex() throws Exception{
        //1.准备request对象
        GetIndexRequest request=new GetIndexRequest();
        request.indices(index);
        //2.通过Cilent操作
        RestHighLevelClient client = EsClient.getClient();
        boolean exists= client.indices().exists(request,RequestOptions.DEFAULT);
        //3.输出
        if (exists){
            // 1.获取request
            DeleteIndexRequest deleteIndexRequest = new DeleteIndexRequest(index);
            //  2.使用client 操作request 删除索引
            AcknowledgedResponse delete = client.indices().delete(deleteIndexRequest, RequestOptions.DEFAULT);
            //  3.输出结果
            System.out.println(delete.isAcknowledged());
        }else {
            System.out.println("没有该索引");
        }
        
    }

三、文档操作

1、添加文档

首先导入jackson依赖

	  <!-- jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class KeyText {

    @JsonIgnore
    private Integer id;
    private String kwname;
    private String text;
}

测试:

	ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient();
    String index = "keytext";
    String type="ktext";

	//添加文档
    @Test
    public void createDocTest() throws IOException {

        //  1.准备一个json数据
        KeyText keyText = new KeyText(1,"ws","ws内容");
        String json = mapper.writeValueAsString(keyText);

        //  2.创建一个request对象(手动指定的方式创建)
        IndexRequest request = new IndexRequest(index,type,keyText.getId().toString());
        request.source(json, XContentType.JSON);

        // 3.使用client 操作request对象生成doc
        IndexResponse response = client.index(request, RequestOptions.DEFAULT);

        // 4.输出返回结果
        System.out.println(response.getResult().toString());

    }

在这里插入图片描述

2、修改文档

	ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient();
    String index = "keytext";
    String type="ktext";
    
    //修改文档
    @Test
    public void updateDocTest() throws Exception{
        // 1.创建要更新的Map
        Map<String,Object>  doc = new HashMap<>();
        doc.put("kwname","ps");

        // 2.创建request, 将doc 封装进去
        UpdateRequest request = new UpdateRequest(index,type,"1");
        request.doc(doc);

        // 3. client 去操作 request
        UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
        // 4.输出 更新结果
        System.out.println(response.getResult());
    }

3、删除文档

	ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient();
    String index = "keytext";
    String type="ktext";

    @Test
    public void deleteDocTest() throws  Exception{
        //  1.封装删除对象
        DeleteRequest request = new DeleteRequest(index,type,"1");

        //  2 client 操作 request对象
        DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
        //  3.输出结果
        System.out.println(response.getResult().toString());
    }

4、批量操作 新增

	ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient();
    String index = "keytext";
    String type="ktext";
    
    @Test
    public void bulkCreateDoc() throws  Exception{
        // 1.准备多个json 对象
        KeyText keyText1 = new KeyText(1,"ws","ws内容");
        KeyText keyText2 = new KeyText(2,"ps","ps内容");
        KeyText keyText3 = new KeyText(3,"ea","ea内容");

        String json1  = mapper.writeValueAsString(keyText1);
        String json2  = mapper.writeValueAsString(keyText2);
        String json3  = mapper.writeValueAsString(keyText3);

        // 2.创建request
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.add(new IndexRequest(index,type,keyText1.getId().toString()).source(json1,XContentType.JSON))
                .add(new IndexRequest(index,type,keyText2.getId().toString()).source(json2,XContentType.JSON))
                .add(new IndexRequest(index,type,keyText3.getId().toString()).source(json3,XContentType.JSON));

        // 3.client 执行
        BulkResponse responses = client.bulk(bulkRequest, RequestOptions.DEFAULT);

        // 4.输出结果
        System.out.println(responses.getItems().toString());
    }

5、批量 删除

	ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient();
    String index = "keytext";
    String type="ktext";
    
    @Test
	public void bulkDelete() throws Exception{
	    // 1.创建Request 对象
	    BulkRequest bulkRequest = new BulkRequest();
	    bulkRequest.add(new DeleteRequest(index,type,"1"));
	    bulkRequest.add(new DeleteRequest(index,type,"2"));
	    bulkRequest.add(new DeleteRequest(index,type,"3"));
	    // 2.执行
	    BulkResponse re = client.bulk(bulkRequest, RequestOptions.DEFAULT);
	    // 3.输出结果
	    System.out.println(re.toString());
	
	}

6、批量导入数据库数据到ES

    /**
     * 添加文章
     * @throws IOException
     */

    @Autowired
    KeyWordService keyWordService;
    
    ObjectMapper mapper = new ObjectMapper();
    RestHighLevelClient client =  EsClient.getClient(); 
    String index = "keywordlist";
    String type="tweet";
    
    @Test
    public void addDOC2() throws IOException{
        //  1.准备一个json数据
        List<KeyWord> keyWordList = keyWordService.findAll();
        for (int i = 0; i < keyWordList.size(); i++) {
            String json = mapper.writeValueAsString(keyWordList.get(i));
            //  2.创建一个request对象(手动指定的方式创建)
            IndexRequest request = new IndexRequest(index,type,keyWordList.get(i).getKwid());
            request.source(json, XContentType.JSON);

            // 3.使用client 操作request对象生成doc
            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            // 4.输出返回结果
            System.out.println(response.getResult().toString());
        }
    }

四、封装查询

1、准备EsClient类连接ES

public class EsClient {

    public static RestHighLevelClient getClient(){
        //  创建 HttpHost
        HttpHost httpHost = new HttpHost("47.115.5.93",9200);

        // 创建 RestClientBuilder
        RestClientBuilder builder = RestClient.builder(httpHost);

        // 创建 RestHighLevelClient
        RestHighLevelClient client = new RestHighLevelClient(builder);

        return client;
    }
}

2、新建EsKeyWordService类

import java.util.ArrayList;
import java.util.Map;

public interface EsKeyWordService {
    ArrayList<Map<String,Object>> findByEsKeyword(String eskeyword);
}

3、新建EsKeyWordServiceImpl类

@Service
public class EsKeyWordServiceImpl implements EsKeyWordService {

    RestHighLevelClient restHighLevelClient =  EsClient.getClient();  // 连接ES
    String index = "keywordlist";   // 索引
    String type="tweet";           // 类型


    /**
     * 根据关键词查询
     * @param eskeyword
     * @return
     */
    @SneakyThrows
    @Override
    public ArrayList<Map<String,Object>> findByEsKeyword(String eskeyword) {
        //1.创建request对象
        SearchRequest searchRequest=new SearchRequest(index);
        searchRequest.types(type);
        //2.指定查询条件
        SearchSourceBuilder builder=new SearchSourceBuilder();
        
         //这里使用 kwname.keyword 可解决中文查询为空的问题
        builder.query(QueryBuilders.termQuery("kwname.keyword",eskeyword));
        //builder.query(QueryBuilders.matchPhraseQuery("kwname",eskeyword));
        
        searchRequest.source(builder);
        //执行查询
        SearchResponse rsp = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        //存放数据
        ArrayList<Map<String,Object>> keyWordList = new ArrayList<>();
        for (SearchHit hit:rsp.getHits().getHits()) {
            keyWordList.add(hit.getSourceAsMap());
        }
        //返回数据
        return keyWordList;
    }
}

4、新建EsKeywordController类

@RestController
public class EsKeywordController {

    private ResultInfo info;
    @Autowired
    EsKeyWordService esKeyWordService;

    @ModelAttribute
    public void init() {
        info = new ResultInfo();
    }

    /**
     * 根据关键词查询
     * @param keyword
     * @return
     */
    @GetMapping("/es")
    public ResultInfo EsKeywordList(String keyword){
        ArrayList<Map<String,Object>> keyWordList = esKeyWordService.findByEsKeyword(keyword);
        if (keyWordList != null){
            info.setData(keyWordList);
        }else {
            info.setMsg(Code.NODATA);
        }
        return info;
    }
}

5、测试

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值