java 操作es 的基本操作

这篇具有很好参考价值的文章主要介绍了java 操作es 的基本操作。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 创建索引
  • 创建索引别名
  • 索引的相关设置
  • 查询索引数据
  • bulk 导入数据
  • 持续更新中~

pom的坐标文章来源地址https://www.toymoban.com/news/detail-807261.html

        <!--es相关-->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.10.2</version> <!-- 请根据需要选择合适的版本 -->
        </dependency>

package es;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpHost;
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
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.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.support.master.AcknowledgedResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class EsConnectionExample {

    public static void main(String[] args) throws IOException {
        // 创建客户端
        // 连接es的地址
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("ip", 9200, "http"))); // 修改为你的ES地址和端口

        //创建索引
        CreateIndexRequest createIndexRequest = new CreateIndexRequest("my_index"); // 创建名为"my_index"的索引
        createIndexRequest.settings(Settings.builder()
                .put("index.number_of_shards", 3) // 设置分片数
                .put("index.number_of_replicas", 2) // 设置副本数
        );
        CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
        System.out.println("索引创建成功:" + createIndexResponse.isAcknowledged());


        //给索引插入数据
        Map<String, Object> data = new HashMap<>();
        data.put("name", "huangi"); // 设置文档标题
        data.put("age", "18"); // 设置文档内容
        IndexRequest indexRequest = new IndexRequest("my_index"); // 将数据插入到"my_index"索引中
        indexRequest.id("1"); // 设置文档ID为1
        indexRequest.source(data, XContentType.JSON); // 将数据转换为JSON格式并设置到索引请求中
        IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println("数据插入成功:" + indexResponse.getResult().name().toLowerCase());

        
        //---------------------------------------------------------------------                             
        //查询一个名叫my_index的索引下列是age,值为25的数据,不是格式化展示                                                            
        // 构建查询请求                                                                                          
        // 创建搜索索引请求
        SearchRequest searchRequest = new SearchRequest("my_index"); // "posts" 是 index 的名字
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        searchSourceBuilder.query(QueryBuilders.matchAllQuery()); // 查询所有文档
        //searchSourceBuilder.sort("created_at", SortOrder.DESC); // 按 created_at 字段降序排序
        searchSourceBuilder.highlighter(new HighlightBuilder().field("content").preTags("<em>").postTags("</em>")); // 对 content 字段进行高亮显示
        searchRequest.source(searchSourceBuilder);

        // 执行搜索并获取响应
        SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println("Total hits: " + searchResponse.getHits().getTotalHits().value);
        Map<String, HighlightField> highlightFields = searchResponse.getHits().getHits()[0].getHighlightFields();
        for (HighlightField highlightField : highlightFields.values()) {
            System.out.println("输出:"+highlightField.fragments()[0].string()); // 输出高亮显示的内容片段
        }


        //---------------------------------------------------------------------
        //查询一个名叫my_index的索引下列是age,值为25的数据,并格式化展示
        // 构建查询请求
        SearchRequest searchRequest1 = new SearchRequest("my_index"); // 将"your_index"替换为您要查询的索引名称
        SearchSourceBuilder searchSourceBuilder1 = new SearchSourceBuilder();
        searchSourceBuilder1.query(QueryBuilders.matchQuery("age", "25")); // 将"field_name"替换为您要查询的字段名称,将"query_value"替换为您要匹配的查询值
        searchRequest1.source(searchSourceBuilder1);

        // 执行查询请求并获取响应
        SearchResponse searchResponse1 = client.search(searchRequest1, RequestOptions.DEFAULT);

        // 处理响应数据(例如打印结果)
        System.out.println("Total hits: " + searchResponse1.getHits().getTotalHits().value);
        System.out.println("Hits: " + JSONObject.toJSONString(searchResponse1.getHits().getHits()));

        // 处理响应数据(例如打印结果)
        for (SearchHit hit : searchResponse1.getHits()) {
            HighlightField highlightField = hit.getHighlightFields().get("field_name"); // 将"field_name"替换为您要高亮的字段名称
            String highlightedValue = highlightField != null ? highlightField.getFragments()[0].string() : hit.getSourceAsString(); // 如果存在高亮结果,则获取第一个片段的值,否则获取原始字段的值
            System.out.println(highlightedValue); // 打印字段的值
        }

        //---------------------------------------------------------------------
        //创建索引别名
        // 索引名称和别名
        String indexName = "my_index";
        String aliasName = "my_index_alias";

        // 创建一个别名请求
        IndicesAliasesRequest request = new IndicesAliasesRequest();
        IndicesAliasesRequest.AliasActions aliasAction = new IndicesAliasesRequest.AliasActions(IndicesAliasesRequest.AliasActions.Type.ADD)
                .index(indexName)
                .alias(aliasName);
        request.addAliasAction(aliasAction);

        // 执行请求
        AcknowledgedResponse indicesAliasesResponse = client.indices().updateAliases(request, RequestOptions.DEFAULT);

        // 检查操作是否成功
        boolean acknowledged = indicesAliasesResponse.isAcknowledged();
        if (acknowledged) {
            System.out.println("Alias was successfully added to the index.");
        } else {
            System.out.println("Alias addition was not acknowledged.");
        }

        //---------------------------------------------------------------------
        //bulk 导入
        try (BufferedReader reader = new BufferedReader(new FileReader("user.json"))) {
            String line;

            // 构造 BulkRequest 对象并添加要导入的文档
            BulkRequest request1 = new BulkRequest();
            while ((line = reader.readLine()) != null) {
                XContentBuilder builder = XContentFactory.jsonBuilder()
                        .startObject()
                        .field("name", line)
                        .field("age", line)
                        .field("sex" , line)
                        .field("telephone", line)
                        .endObject();
                IndexRequest indexRequest1 = new IndexRequest("my_index")
                        .source(builder);
                request1.add(indexRequest1);
            }

            // 发送 BulkRequest 请求
            BulkResponse response = client.bulk(request1, RequestOptions.DEFAULT);

            if (response.hasFailures()) {
                System.out.println("Failed to import documents.");
            } else {
                System.out.println("Documents imported successfully!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭 ElasticSearch 客户端连接
            client.close();
        }


        // 关闭客户端连接
        client.close();
    }
}

到了这里,关于java 操作es 的基本操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java 操作es 的基本操作

    创建索引 创建索引别名 索引的相关设置 查询索引数据 bulk 导入数据 持续更新中~ pom的坐标

    2024年01月20日
    浏览(33)
  • elasticsearch 7.9.3知识归纳整理(二)之 es基本原理及使用kibana操作es的常见命令

    一、es的基本原理与基础概念 1.1 倒排索引 倒排索引 源于实际应用中需要根据属性的值来查找记录。这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。由于不是由记录来确定属性值,而是由属性值来确定记录的位置,因而称为倒排索引(inverted index)。带

    2024年02月12日
    浏览(36)
  • ElasticSearch Java API 基本操作

    ElasticSearch Java API是ES官方在8.x版本推出的新java api,也可以适用于7.17.x版本的es。 本文主要参考了相关博文,自己手动编写了下相关操作代码,包括更新mappings等操作的java代码。 代码示例已上传github。 elasticsearch 版本: 7.17.9 ,修改 /elasticsearch-7.17.9/config/elasticsearch.yml ,新增

    2024年02月08日
    浏览(35)
  • 原生语言操作和spring data中RestHighLevelClient操作Elasticsearch,索引,文档的基本操作,es的高级查询.查询结果处理. 数据聚合.相关性系数打分

    ​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasti

    2024年02月05日
    浏览(59)
  • Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了。在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题。看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得都不是很全面。因此就有了写ElasticSearch开发教程的想法,将学习到的技术经验分享出来,

    2024年02月05日
    浏览(36)
  • ElasticSearch 中的中文分词器以及索引基本操作详解,Java高并发编程详解深入理解pdf

    PUT book/_settings { “number_of_replicas”: 2 } 修改成功后,如下: 更新分片数也是一样。 2.3 修改索引的读写权限 索引创建成功后,可以向索引中写入文档: PUT book/_doc/1 { “title”:“三国演义” } 写入成功后,可以在 head 插件中查看: 默认情况下,索引是具备读写权限的,当然这

    2024年04月09日
    浏览(39)
  • 【ES】---ES的基本操作

    ES有4种客户端,分别是:Jest client、Rest client、Transport client、Node client。 ES支持两种协议 HTTP协议,支持的客户端有Jest client和Rest client Native Elasticsearch binary协议,也就是Transport client【7.0弃用】和Node client【2.3弃用】 Jest client非官方支持,在ES5.0之前官方提供的客户端只有Trans

    2024年02月08日
    浏览(29)
  • es基本操作使用

    es映射关系(对应数据库) ———————————————— 1.创建索引 创建索引时指定属性名,即映射关系 2.修改索引 3.删除索引 eg:delete /test/type1/1,表示删除test索引库中类型(表)为type1中id属性为1的document(记录)。 4.查询索引 表示查询某一个属性名为name的值为张

    2024年02月15日
    浏览(23)
  • 一些es的基本操作

    用postMan: 给名为population_portrait_hash_seven的索引增加了一个text类型的字段。 用chrome插件Elasticvue 的Rest接口,本质上应该也是发HTTP請求: 给这个接口增加了一个keyword类型的字段。 好像直接删除是不支持的。要建个新索引,再使用 Reindex API 将数据从旧索引复制到新索引,排除不

    2024年01月25日
    浏览(36)
  • Es的索引操作(代码中的基本操作)

    // 1.创建客户端对象 RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost(\\\"localhost\\\", 9200, \\\"http\\\")) ); (1)创建索引 // 创建索引 - 请求对象 CreateIndexRequest request = new CreateIndexRequest(\\\"user\\\"); // 发送请求,获取响应 CreateIndexResponse response = client.indices().create(request, RequestOp

    2024年02月13日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包