ElasticSearch:进阶,Java操作ES-测试保存


可以通过requestOptions对ES的请求进行设置。

参照API,引入 requestOptions,这里可以对请求进行公共的设置。但是目前是测试没用到,就先注释掉。

/**
 * 整合es
 * 1.导入依赖
 * 2.编写配置  给容器注入一个 RestHighLevelClient
 * 3.参照api
 *
 */
@Configuration
public class GuliMallElasticSearchConfig {
    public static final RequestOptions COMMON_OPTIONS;

    static {
        RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
//    builder.addHeader("Authorization", "Bearer " + TOKEN);
//    builder.setHttpAsyncResponseConsumerFactory(
//          new HttpAsyncResponseConsumerFactory
//                .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024));
        COMMON_OPTIONS = builder.build();
    }


    @Bean
    public RestHighLevelClient esRestClient(){
        //String hostname, int port, String scheme
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.155.3",9200,"http")));//http协议不写也行,默认就是
        return client;
    }
}

  

 似乎有很多方式完成这些操作。

先查看索引:

GET _cat/indices

  删除索引:

DELETE users

Java测试:

    /**
     * 插入数据
     */
    @Test
    public void indexTest() throws IOException {
        IndexRequest request = new IndexRequest("users");
        // 设置索引id
        request.id("1"); //不设置就自动生成一个ID
        // 第1种方式
      request.source("userName","wyw","age","21","gender","男");

        // 第2种方式  实际中用的最多的就是这种 
//        User user = new User();
//        user.setUserName("firenay");
//        user.setAge("20");
//        user.setGender("男");
//        String jsonString = JSON.toJSONString(user);
//        // 传入json时 指定类型
//        request.source(jsonString, XContentType.JSON);
//
        // 执行保存操作
        IndexResponse response = client.index(request, GuliMallElasticSearchConfig.COMMON_OPTIONS);//同步保存
//        client.indexAsync();//异步 里面还需要传一个listener


        System.out.println(response);
        System.out.println(response.status());
    }

上面插入数据的代码跑起来:

java.lang.IncompatibleClassChangeError: Found interface org.elasticsearch.common.bytes.BytesReference, but class was expected

	at org.elasticsearch.client.RequestConverters.index(RequestConverters.java:340)
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1450)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394)

https://www.jianshu.com/p/f81636ee45b4

解决方法还是和之前的版本有关

全改为7.6.2:

成功存储