泰国按摩群

大秀直播daxiu

发布日期:2025-12-17 13:54    点击次数:57

弁言

在当代的搜索和分析运用中大秀直播daxiu,Elasticsearch 也曾成为不成或缺的组件。

跟着 Elasticsearch 8.X 的发布,其 Java 客户端 API 也有了显赫的更新。

图片

本文将基于圆善的 Java 代码,详备先容如安在工程中使用 Elasticsearch 8.X 的最新 Java API Client。

干货 | Elasticsearch Java 客户端演进历史和选型指南

通过替换示例代码中的部老实容,不错将其平直运用于实质的模式劝诱中。

一、8.X 最新 Java API Client特质概览1. 强类型请乞降反馈

类型安全

针对统共的 Elasticsearch API,客户端皆提供了强类型的请乞降响粗犷象,减少了运行时误差的可能性。

自动完成撑抓

强类型的筹画使得 IDE 不错更好地提供代码辅导和自动完成,普及劝诱效劳。

2. 同步和异步 API

同步操作

适用于需要按照轨则现实的操作,确保每个申请皆在前一个申请完成后现实。

异步操作

提供非封闭的面容现实 API 调用,适用于需要高并发或对反馈手艺敏锐的运用。

3. 流式构建器和函数式编程模式

流式接口

使用链式调用面容,不错简陋地构建复杂的申请。

函数式编程

通过 Lambda 抒发式,简化代码编写,普及可读性。

4. 无缝集成对象映射器

Jackson 撑抓

默许使用 Jackson 行为 JSON 领略库,通俗将自界说的 Java 对象与 JSON 数据相互休养。

JSON-B 撑抓

也不错遴荐使用任何罢明晰 JSON-B 纪律的库,称心不同模式标需求。

5. 基于底层 REST 客户端的公约处理

公约空洞:

将公约处理奉求给底层的 HTTP 客户端,如 Java Low Level REST Client。

运动处治:

处理 HTTP 运动池、重试机制、节点发现等底层细节,劝诱者无需热心。

这意味着:运动池处治:自动处治 HTTP 运动池,普及性能。重试机制:在申请失败时,泰国按摩群客户端不错自动重试节点发现:撑抓自动发现集群中的节点,已矣负载平衡。劝诱者无需手动处理这些复杂的细节,只需热心业务逻辑。https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/introduction.html二、环境准备

在起头之前,确保我们也曾在土产货或奇迹器上收效装配并运行了 Elasticsearch 8.X。同期,我们的劝诱环境需要具备以下条款:

Java 版块:JDK 1.8 或更高版块 依赖库:Elasticsearch Java API Client 在 pom.xml 文献中添加以下依赖:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.mingyi.cn</groupId>  <artifactId>ESJavaClient</artifactId>  <version>0.0.1-SNAPSHOT</version>        <dependencies>    <dependency>      <groupId>co.elastic.clients</groupId>      <artifactId>elasticsearch-java</artifactId>      <version>8.11.0</version>    </dependency>    <dependency>      <groupId>com.fasterxml.jackson.core</groupId>      <artifactId>jackson-databind</artifactId>      <version>2.12.3</version>    </dependency> <dependency>   <groupId>ch.qos.logback</groupId>   <artifactId>logback-classic</artifactId>   <version>1.2.3</version> </dependency>  </dependencies>  </project>
三、Elasticsearch 客户端驱动化1. 基于 HTTPS 的客户端驱动化

Elasticsearch 8.X 默许开启了安全特质,需要通过 HTTPS 进行通讯。以下是驱动化客户端的主要法子:

树立认证信息:使用用户名和密码进行身份考证。

加载 CA 文凭:用于劝诱安全的 SSL 运动。

图片

建立 SSL 高下文:创建 SSLContext,用于 HTTP 客户端构建。

// 树立用户名和密码final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();credentialsProvider.setCredentials(AuthScope.ANY,    new UsernamePasswordCredentials("elastic", "your_password"));// 加载 CA 文凭Path caCertificatePath = Paths.get("path/to/http_ca.crt");CertificateFactory factory = CertificateFactory.getInstance("X.509");Certificate trustedCa;try (InputStream is = Files.newInputStream(caCertificatePath)) {    trustedCa = factory.generateCertificate(is);}// 建立 SSL 高下文KeyStore trustStore = KeyStore.getInstance("pkcs12");trustStore.load(null, null);trustStore.setCertificateEntry("ca", trustedCa);SSLContextBuilder sslContextBuilder = SSLContexts.custom()    .loadTrustMaterial(trustStore, null);final SSLContext sslContext = sslContextBuilder.build();// 构建 RestClientRestClientBuilder builder = RestClient.builder(    new HttpHost("localhost", 9200, "https"))    .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder        .setSSLContext(sslContext)        .setDefaultCredentialsProvider(credentialsProvider)        .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE));RestClient restClient = builder.build();// 创建 Elasticsearch 客户端ElasticsearchTransport transport = new RestClientTransport(    restClient, new JacksonJsonpMapper());ElasticsearchClient client = new ElasticsearchClient(transport);
2. 使用 API Key 的客户端驱动化(可选)

如若但愿使用 API Key 进行认证,不错按照以下面容建立:

String apiKeyId = "your_api_key_id";String apiKeySecret = "your_api_key_secret";String apiKeyAuth = Base64.getEncoder().encodeToString(    (apiKeyId + ":" + apiKeySecret).getBytes(StandardCharsets.UTF_8));Header[] defaultHeaders = {    new BasicHeader("Authorization", "ApiKey " + apiKeyAuth)};builder.setDefaultHeaders(defaultHeaders);
四、基本操作示例1. 创建索引
public void createIndex(String indexName) throws IOException {    client.indices().create(c -> c.index(indexName));}
2. 索引文档
public void indexDocument(String indexName, String id, Map<String, Object> document) throws IOException {    client.index(i -> i.index(indexName).id(id).document(document));}
3. 搜索文档
public SearchResponse<Object> search(String indexName, List<Query> queries, List<SortOptions> sortOptions, int page, int pageSize) throws IOException {    SearchRequest.Builder searchRequestBuilder = new SearchRequest.Builder()        .index(indexName)        .from(page * pageSize)        .size(pageSize)        .query(q -> q.bool(b -> b.must(queries)));    if (sortOptions != null && !sortOptions.isEmpty()) {        searchRequestBuilder.sort(sortOptions);    }    return client.search(searchRequestBuilder.build(), Object.class);}
4. 团聚查询
public SearchResponse<Object> aggregateSearch(String indexName, List<Query> queries, Map<String, Aggregation> aggregations) throws IOException {    return client.search(s -> s        .index(indexName)        .query(q -> q.bool(b -> b.must(queries)))        .aggregations(aggregations), Object.class);}
5. 剧本排序示例
public SearchResponse<Map> searchWithScriptSort(String indexName, String fieldName, String queryText, String scriptSource, double factor) throws IOException {    Query query = MatchQuery.of(m -> m.field(fieldName).query(queryText))._toQuery();    Script script = Script.of(s -> s.inline(i -> i        .source(scriptSource)        .params("factor", JsonData.of(factor))));    SortOptions sortOptions = SortOptions.of(so -> so.script(ss -> ss        .script(script)        .type(ScriptSortType.Number)        .order(SortOrder.Asc)));    SearchRequest searchRequest = new SearchRequest.Builder()        .index(indexName)        .query(query)        .sort(sortOptions)        .build();    return client.search(searchRequest, Map.class);}
五、圆善代码示例

以下是圆善的代码示例,民众不错左证需要进行替换和修改,以得当我们我方的工程需求。

public class ElasticsearchService {    private static final Logger logger = LoggerFactory.getLogger(ElasticsearchService.class);    private ElasticsearchClient client;    // 构造函数,驱动化客户端    public ElasticsearchService() throws CertificateException, IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {        // 驱动化代码(参考前文)    }    // 创建索引    public void createIndex(String indexName) throws IOException {        client.indices().create(c -> c.index(indexName));    }    // 索引文档    public void indexDocument(String indexName, String id, Map<String, Object> document) throws IOException {        client.index(i -> i.index(indexName).id(id).document(document));    }    // 搜索文档    public SearchResponse<Object> search(...) throws IOException {        // 已矣代码(参考前文)    }    // 团聚查询    public SearchResponse<Object> aggregateSearch(...) throws IOException {        // 已矣代码(参考前文)    }    // 剧本排序示例    public SearchResponse<Map> searchWithScriptSort(...) throws IOException {        // 已矣代码(参考前文)    }    // 主方法示例    public static void main(String[] args) {        try {            ElasticsearchService service = new ElasticsearchService();            String indexName = "my-index";            // 创建索引            service.createIndex(indexName);            // 索引文档            Map<String, Object> document = new HashMap<>();            document.put("title", "Elasticsearch Basics");            document.put("author", "John Doe");            document.put("content", "This is a tutorial for Elasticsearch.");            service.indexDocument(indexName, "1", document);            logger.info("Document indexed.");            // 刷新索引            service.client.indices().refresh(r -> r.index(indexName));            // 搜索示例            Query query = QueryBuilders.match(m -> m.field("title").query("Elasticsearch"));            List<Query> queries = Arrays.asList(query);            SearchResponse<Object> response = service.search(indexName, queries, null, 0, 10);            response.hits().hits().forEach(hit -> logger.info(hit.source().toString()));            // 团聚查询示例            Aggregation aggregation = AggregationBuilders.terms(t -> t.field("author.keyword"));            Map<String, Aggregation> aggMap = new HashMap<>();            aggMap.put("author_count", aggregation);            SearchResponse<Object> aggResponse = service.aggregateSearch(indexName, queries, aggMap);            aggResponse.aggregations().forEach((key, agg) -> logger.info(key + ": " + agg));            // 剧本排序示例            String scriptSource = "doc['content.keyword'].value.length() * params.factor";            double factor = 1.1;            SearchResponse<Map> scriptSortResponse = service.searchWithScriptSort(indexName, "content", "Elasticsearch", scriptSource, factor);            scriptSortResponse.hits().hits().forEach(hit -> logger.info(hit.source().toString()));        } catch (Exception e) {            logger.error("Error occurred:", e);        }    }}
六、详实事项6.1 认证面容

Elasticsearch 8.X 默许开启了安全认证,我们需要左阐发质情况遴荐使用用户名密码认证或 API Key 认证。

6.2 SSL 文凭

确保正确加载了 Elasticsearch 提供的 CA 文凭,以劝诱安全的 SSL 运动。

6.3 依赖版块

请确保使用的 Elasticsearch Java API Client 版块与 Elasticsearch 奇迹器版块匹配。

七、追思

本文详备先容了若何使用 Elasticsearch 8.X 的最新 Java API 进行客户端驱动化、索引操作、搜索和团聚查询。

通过圆善的代码示例,我们不错平直将其运用于工程劝诱中。但愿本文能对民众在使用 Elasticsearch 进行劝诱时提供匡助。

图片

现实效果截图

图片

新写入索引数据

图片

圆善可用工程下载地址:https://t.zsxq.com/yLZmm

七、参考贵府Elasticsearch Java API Client 官方文档https://www.elastic.co/guide/en/elasticsearch/client/java-api-client/current/index.html干货 | Elasticsearch Java 客户端演进历史和选型指南Elasticsearch 安全通讯建立云奇迹器 Centos7 部署 Elasticsearch 8.0 + Kibana 8.0 指南Elasticsearch 团聚查询基于儿童积木玩物图解 Elasticsearch 团聚

更短手艺更快习得更多干货!

和全球超2000+ Elastic 敬爱者全部精进!

elastic6.cn——ElasticStack进阶助手大秀直播daxiu

抢先一步学习进阶干货! 本站仅提供存储奇迹,统共内容均由用户发布,如发现存害或侵权内容,请点击举报。




Powered by 泰国按摩群 @2013-2022 RSS地图 HTML地图

Copyright Powered by365站群 © 2013-2025