查看“Java Elasticsearch:基础”的源代码
←
Java Elasticsearch:基础
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
[[category:Java&ElasticSearch]] == 关于 == 相关内容基于 ES 官方的 '''Java REST Client'''(老的Java API 在 ES 7.0.0 以后废弃,不推荐使用)。 * 支持 Elasticsearch 5.6.x 以上。 * Java 1.8 以上。 Maven配置: <syntaxhighlight lang="xml" highlight=""> <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearch-rest-high-level-client</artifactId> <version>7.8.1</version> </dependency> </syntaxhighlight> * 可以根据自己的 ES 版本选择对应的 Java REST Client 版本。 == 连接配置 == Java Elasticsearch '''RestHighLevelClient''' 的配置详情。 * '''请求都是通过 RestHighLevelClient 实例发出去的'''; RestHighLevelClient常用配置如下: * elasticsearch连接地址 * elasticsearch账号/密码 * Http请求头 * 连接超时 * 设置线程池大小 === 创建client === RestHighLevelClient 依赖 REST low-level client builder 进行配置,即依赖底层的 RestClientBuilder 对象进行参数设置: <syntaxhighlight lang="Java" highlight=""> // 首先创建RestClientBuilder,后续章节通过RestClientBuilder对象进行参数配置。 RestClientBuilder restClientBuilder = RestClient.builder( new HttpHost("localhost", 9200, "http"), // 设置ES服务地址,支持多个 new HttpHost("localhost", 9201, "http")); // 创建 RestHighLevelClient,请求都是通过 RestHighLevelClient 实例发出去的。 RestHighLevelClient client = new RestHighLevelClient(restClientBuilder); </syntaxhighlight> === 配置ES账号密码 === <syntaxhighlight lang="Java" highlight=""> restClientBuilder.setHttpClientConfigCallback( new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { // 通过CredentialsProvider实例,配置账号和密码 CredentialsProvider credentialsProvider = new BasicCredentialsProvider(); credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("user", "password")); // 设置安全验证凭证 return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider); } }); </syntaxhighlight> === 设置Http Header === <syntaxhighlight lang="Java" highlight=""> // 创建header数组,可以设置多个header Header[] defaultHeaders = new Header[]{new BasicHeader("header", "value")}; // 设置http header restClientBuilder.setDefaultHeaders(defaultHeaders); </syntaxhighlight> === Timeout设置 === <syntaxhighlight lang="Java" highlight=""> restClientBuilder.setRequestConfigCallback( new RestClientBuilder.RequestConfigCallback() { @Override public RequestConfig.Builder customizeRequestConfig(RequestConfig.Builder requestConfigBuilder) { return requestConfigBuilder .setConnectTimeout(5000) // 设置连接超时时间,5秒 .setSocketTimeout(60000); // 设置请求超时时间,1分种 } }); </syntaxhighlight> === 设置线程池大小 === <syntaxhighlight lang="Java" highlight=""> restClientBuilder.setHttpClientConfigCallback( new RestClientBuilder.HttpClientConfigCallback() { @Override public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) { return httpClientBuilder.setDefaultIOReactorConfig( IOReactorConfig.custom() .setIoThreadCount(10) // 设置线程数 .build()); } }); </syntaxhighlight> == 快速入门 == === 创建客户端 === 在操作ES之前需要创建一个client, ES请求都是通过client发送,通过client可以配置ES的服务地址、安全验证相关参数。 * 通常全局创建一个client即可; <syntaxhighlight lang="Java" highlight=""> RestHighLevelClient client = new RestHighLevelClient( RestClient.builder( new HttpHost("localhost", 9200, "http"), new HttpHost("localhost", 9201, "http"))); </syntaxhighlight> client内部维护了连接池,因此在不使用client的时候需要通过下面方式释放资源。 <syntaxhighlight lang="Java" highlight=""> client.close(); </syntaxhighlight> === 创建索引 === <syntaxhighlight lang="Java" highlight=""> // 创建Request对象, 准备创建的索引名为twitter CreateIndexRequest request = new CreateIndexRequest("twitter"); // 设置Request参数 request.settings(Settings.builder() .put("index.number_of_shards", 3) // 设置分区数 .put("index.number_of_replicas", 2) // 设置副本数 ); // 通过JSON字符串的方式,设置ES索引结构的mapping // ps: 通常都是通过json配置文件加载索引mapping配置,不需要拼接字符串。 request.mapping( "{\n" + " \"properties\": {\n" + " \"message\": {\n" + " \"type\": \"text\"\n" + " }\n" + " }\n" + "}", XContentType.JSON); // 执行请求,创建索引 CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT); if (createIndexResponse.isAcknowledged()) { // 创建成功 } </syntaxhighlight> === 插入数据 === <syntaxhighlight lang="Java" highlight=""> // 创建对应的Request请求,设置索引名为posts IndexRequest request = new IndexRequest("posts"); // 设置文档id=1 request.id("1"); // 以json字符串的形式设置文档内容,也就是准备插入到ES中的数据 String jsonString = "{" + "\"user\":\"kimchy\"," + "\"postDate\":\"2013-01-30\"," + "\"message\":\"trying out Elasticsearch\"" + "}"; request.source(jsonString, XContentType.JSON); // 执行请求 IndexResponse indexResponse = client.index(request, RequestOptions.DEFAULT); </syntaxhighlight> === 查询数据 === 根据id查询一条数据: <syntaxhighlight lang="Java" highlight=""> // 创建对应的Request对象,设置索引名为posts, 文档id=1 GetRequest getRequest = new GetRequest("posts", "1"); // 执行ES请求 GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT); // 处理查询结果 String index = getResponse.getIndex(); String id = getResponse.getId(); // 检查文档是否存在 if (getResponse.isExists()) { long version = getResponse.getVersion(); // 获取文档数据的json字符串形式,可以使用json库转换成Java对象 String sourceAsString = getResponse.getSourceAsString(); // 获取文档数据的Map形式 Map<String, Object> sourceAsMap = getResponse.getSourceAsMap(); // 获取文档数据的字节数组形式 byte[] sourceAsBytes = getResponse.getSourceAsBytes(); } else { // 文档不存在 } </syntaxhighlight> === 更新数据 === <syntaxhighlight lang="Java" highlight=""> // 创建对应的Request对象,设置索引名为posts, 文档id=1 UpdateRequest request = new UpdateRequest("posts", "1"); // 以map形式,设置需要更新的文档字段 Map<String, Object> jsonMap = new HashMap<>(); jsonMap.put("updated", new Date()); jsonMap.put("reason", "daily update"); request.doc(jsonMap); // 执行请求 UpdateResponse updateResponse = client.update(request, RequestOptions.DEFAULT); </syntaxhighlight> === 删除数据 === <syntaxhighlight lang="Java" highlight=""> // 创建对应的Request对象,设置索引名为posts, 文档id=1 DeleteRequest request = new DeleteRequest("posts", "1"); // 执行请求 DeleteResponse deleteResponse = client.delete(request, RequestOptions.DEFAULT); </syntaxhighlight>
返回至“
Java Elasticsearch:基础
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
大陆简体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
笔记
服务器
数据库
后端
前端
工具
《To do list》
日常
阅读
电影
摄影
其他
Software
Windows
WIKIOE
所有分类
所有页面
侧边栏
站点日志
工具
链入页面
相关更改
特殊页面
页面信息