RestHighLevelClient操作ElasticSearch <部分操作>

本文档展示了如何使用 Elasticsearch 7.6.2 的 High-Level Client 进行索引创建、数据插入、索引存在检查以及高级搜索,包括高亮显示和获取所有索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写自定义目录标题

版本以及需要引入的jar包

 <!--elasticSearch high leve client-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-client</artifactId>
            <version>7.6.2</version>
        </dependency>
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.6.2</version>
        </dependency>

开始操作



import org.apache.http.HttpHost;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.admin.indices.alias.get.GetAliasesRequest;
import org.elasticsearch.client.indices.GetMappingsRequest;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.GetAliasesResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.GetIndexRequest;
import org.elasticsearch.client.indices.GetMappingsResponse;
import org.elasticsearch.cluster.metadata.AliasMetaData;
import org.elasticsearch.cluster.metadata.MappingMetaData;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;

import java.io.IOException;
import java.util.*;

/**
 * @author: zhangxirui
 * @date: 2021-02-07 9:52
 * @version: 1.0
 */
public class ElasticSearchDemo {
    static final RestHighLevelClient restHighLevelClient =
            new RestHighLevelClient(
                    RestClient.builder(
                            new HttpHost("ip", 9200)
                    )
            );

    public static void main(String[] args) throws IOException {
        if (ifIndexExist()){
            intoIndexValue();
        }else {
            createIndex();
            intoIndexValue();
        }
        getAllIndex();

        getFileNames("es_test_index");
    }

	 /**
     * @throws IOException 高亮显示
     */
    private static void highlightetrSearch() throws IOException {
        SearchRequest searchRequest = new SearchRequest("es_test_index");

        //搜索体
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

        QueryStringQueryBuilder queryBuilder = new QueryStringQueryBuilder("打游戏");
        queryBuilder.field("hobby").field("name");

        //构建高亮体
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.preTags("<span style=\"color:red\">");
        highlightBuilder.postTags("</span>");
        //高亮字段
        highlightBuilder.field("name").field("hobby");

        searchSourceBuilder.highlighter(highlightBuilder);
        searchSourceBuilder.query(queryBuilder);
        searchRequest.source(searchSourceBuilder);
        searchSourceBuilder.from(1).size(10);


        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = search.getHits();
        SearchHit[] hits1 = hits.getHits();
        for (SearchHit documentFields : hits1) {
            System.out.println(documentFields);
            Map<String, HighlightField> highlightFields = documentFields.getHighlightFields();

            HighlightField hobby = highlightFields.get("hobby");
            Text[] fragments = hobby.fragments();
            String hhhhh = "";
            for (Text fragment : fragments) {
                hhhhh += fragment;
            }
            System.out.println("hhhhhh"+hhhhh);
        }

    }

    /**
     * @throws IOException 获取全部索引
     */
    private static void getAllIndex() throws IOException {
        //获取全部索引
        List<String> indexlist = new ArrayList<>();
        GetAliasesRequest request = new GetAliasesRequest();
        GetAliasesResponse response = restHighLevelClient.indices().getAlias(request, RequestOptions.DEFAULT);
        Map<String, Set<AliasMetaData>> aliases = response.getAliases();

        Set<String> indices = aliases.keySet();
        for (String index : indices) {
            //获取规范索引
            if (index.endsWith("_index")) {
                indexlist.add(index);
            }
        }
        System.out.println("索引数组是: "+indexlist);
    }

    /**
     * @param indexName 获取索引的字段
     * @throws IOException
     */
    private static void getFileNames(String indexName) throws IOException {
        GetMappingsRequest mappingsRequest = new GetMappingsRequest();
        mappingsRequest.indices(indexName);
        GetMappingsResponse mapping = restHighLevelClient.indices().getMapping(mappingsRequest, RequestOptions.DEFAULT);
        Map<String, MappingMetaData> mappings = mapping.mappings();
        MappingMetaData es_test_index = mappings.get(indexName);
        Map<String, Object> sourceAsMap = es_test_index.getSourceAsMap();
        System.out.println(sourceAsMap);
    }

    /**
     * @return 判断索引是否存在
     * @throws IOException
     */
    private static boolean ifIndexExist() throws IOException {
        GetIndexRequest getIndexRequest = new GetIndexRequest("es_test_index");
        boolean exists = restHighLevelClient.indices().exists(getIndexRequest, RequestOptions.DEFAULT);
        return exists;
    }

    /**
     * @throws IOException 向索引插入数据
     */
    private static void intoIndexValue() throws IOException {

        //构建批量插入对象
        BulkRequest bulkRequest = new BulkRequest();

        XContentBuilder xContentBuilder = XContentFactory.jsonBuilder();
        xContentBuilder.startObject();
        {
            xContentBuilder.field("name","jack");
            xContentBuilder.field("hobby","打游戏");
        }
        xContentBuilder.endObject();

        //创建索引
        IndexRequest indexRequest = new IndexRequest("es_test_index");
        indexRequest.source(xContentBuilder);

        bulkRequest.add(indexRequest);

        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);

        for (BulkItemResponse bulkItemResponse : bulkResponse) {
            DocWriteResponse response = bulkItemResponse.getResponse();
            IndexResponse indexResponse = (IndexResponse) response;
            System.out.println("批量新增成功,{}" + indexResponse.toString());
        }

        /*IndexResponse indexResponse = restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("新增成功,{}" + indexResponse.toString());*/

    }

    /**
     * @throws IOException 创建索引
     */
    private static void createIndex() throws IOException {
        //索引
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("es_test_index");
        createIndexRequest.settings(Settings.builder()
                //number_of_shards 数据分片数 默认为5,有时候设置为3
                .put("index.number_of_shards", "2")
                //number_of_shards 数据备份数 如果只有一台机器 设置为0
                .put("index.number_of_replicas", "0")
        );

        //构建索引mapping
        XContentBuilder xContentBuilder = XContentFactory.jsonBuilder();
        xContentBuilder.startObject();
        {
            xContentBuilder.startObject("properties");
            {
                //字段类型的map
                Map<String, String> typeMap = new HashMap<>();
                typeMap.put("type", "text");
                //设置字段的名称和类型
                xContentBuilder.field("hobby", typeMap);
                xContentBuilder.field("name", typeMap);
            }
            xContentBuilder.endObject();
        }
        xContentBuilder.endObject();

        createIndexRequest.mapping(xContentBuilder);

        //开始创建索引
        restHighLevelClient.indices().create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println("创建成功");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值