java对接es
  MNB4tIcMG5eR 2023年11月02日 41 0

Java对接ES

Elasticsearch(简称ES)是一个基于Lucene的开源搜索引擎,它提供了一个分布式、多租户的全文搜索引擎。在实际开发中,我们经常需要使用Java对接ES进行数据的索引、搜索和分析。本文将介绍如何使用Java对接ES,并给出相应的代码示例。

准备工作

在开始之前,我们需要确保以下几个条件已经满足:

  1. 安装并启动ES服务器。
  2. 引入Java客户端库,如Elasticsearch High Level Rest Client。
  3. 确定要连接的ES服务器地址和端口号。

连接ES服务器

首先,我们需要建立与ES服务器的连接。可以使用ES提供的Java客户端库来实现,以下是一个连接ES服务器的示例代码:

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ESClient {
    private RestHighLevelClient client;

    public ESClient(String host, int port) {
        client = new RestHighLevelClient(
                RestClient.builder(new HttpHost(host, port, "http")));
    }

    public RestHighLevelClient getClient() {
        return client;
    }

    public void close() throws IOException {
        client.close();
    }
}

索引数据

一旦与ES服务器建立连接,我们就可以进行数据的索引操作了。首先,我们需要定义一个索引和索引中的字段。以下是一个定义索引和字段的示例代码:

import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.mapper.ObjectMapper;

public class ESIndex {
    private final RestHighLevelClient client;

    public ESIndex(RestHighLevelClient client) {
        this.client = client;
    }

    public void createIndex(String indexName, String typeName) throws IOException {
        CreateIndexRequest request = new CreateIndexRequest(indexName);
        request.mapping(typeName, getMapping());
        CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
        if (response.isAcknowledged()) {
            System.out.println("Index created");
        } else {
            System.out.println("Index creation failed");
        }
    }

    private XContentBuilder getMapping() throws IOException {
        XContentBuilder builder = XContentFactory.jsonBuilder();
        builder.startObject();
        {
            builder.startObject("properties");
            {
                builder.startObject("title");
                {
                    builder.field("type", "text");
                }
                builder.endObject();
            }
            builder.endObject();
        }
        builder.endObject();
        return builder;
    }
}

搜索数据

一旦数据被索引到ES服务器中,我们就可以通过搜索来查询数据了。以下是一个搜索数据的示例代码:

import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.sort.SortOrder;

public class ESSearch {
    private final RestHighLevelClient client;

    public ESSearch(RestHighLevelClient client) {
        this.client = client;
    }

    public SearchResponse search(String indexName, String keyword) throws IOException {
        SearchRequest request = new SearchRequest(indexName);
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        sourceBuilder.query(QueryBuilders.matchQuery("title", keyword));
        sourceBuilder.timeout(TimeValue.timeValueSeconds(30));
        sourceBuilder.from(0);
        sourceBuilder.size(10);
        sourceBuilder.sort("_score", SortOrder.DESC);
        request.source(sourceBuilder);
        return client.search(request, RequestOptions.DEFAULT);
    }
}

使用示例

现在我们可以使用以上代码进行数据的索引和搜索操作了,以下是一个完整的示例代码:

public class Main {
    public static void main(String[] args) {
        ESClient esClient = new ESClient("localhost", 9200);
        ESIndex esIndex = new ESIndex(esClient.getClient());
        ESSearch esSearch = new ESSearch(esClient.getClient());

        try {
            // 创建索引
            esIndex.createIndex("my_index", "my_type");
            
            // 索引数据
            // ...
            
            // 搜索数据
            SearchResponse response = esSearch.search("my_index", "keyword");
            // 处理搜索结果
            // ...
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                esClient.close();
            }
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
MNB4tIcMG5eR