Elasticsearch简单学习

ElasticSearch学习7-ES的实践简单总结 通过我最近对ES的使用总结出以下几点: 1.es每次最多查询10000条,它的单次查询是有限制的。 2.如果我们想不受限制的消费完某个索引之下的所有数据,我们可以使用滚动翻页的形式去消费。 scrollUrl = "http://"+esIp+":"+esPort+"/"+index+"/_search?scroll=10m&size=5000&pretty"; 该查询会自动返回一个_scroll_id,通过这个id(经过base64编码)可以继续查询。 size 参数允许我们配置 阅读详情

1、依赖的导入

<!--ES依赖-->
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
</dependency>

2、客户端链接

RestHighLevelClient client = new RestHighLevelClient(RestClient.builder(HttpHost.create("http://localhost:9200")));

3、索引库的相关操作

1、索引库的创建
@Test
void createTestIndex() throws IOException {
    /*创建索引库*/
    //1.创建Request对象,索引库名称必须为小写字母
    CreateIndexRequest request = new CreateIndexRequest("test_index");

    String source = "{\n" +
        "        \"mappings\":{\n" +
        "        \"properties\":{\n" +
        "            \"id\":{\n" +
        "                \"type\":\"integer\"\n" +
        "            },\n" +
        "            \"name\":{\n" +
        "                \"type\":\"text\",\n" +
        "                \"analyzer\":\"ik_max_word\"\n" +
        "            },\n" +
        "            \"age\":{\n" +
        "                \"type\":\"integer\"\n" +
        "            },\n" +
        "            \"sex\":{\n" +
        "                \"type\":\"keyword\"\n" +
        "            },\n" +
        "            \"bossId\":{\n" +
        "                \"type\":\"integer\"\n" +
        "            },\n" +
        "            \"departmentId\":{\n" +
        "                \"type\":\"integer\"\n" +
        "            }\n" +
        "        }\n" +
        "    }\n" +
        "}";

    //2.准备请求的参数:DSL语句
    request.source(source, XContentType.JSON);

    //3.发请求
    client.indices().create(request, RequestOptions.DEFAULT);
}
2、判断索引库是否存在
@Test
void existsTestIndex() throws IOException {
    /*判断索引库是否存在*/
    //1.创建Request对象,名称必须为小写字母
    GetIndexRequest request = new GetIndexRequest("test_index");

    //2.发请求
    boolean is = client.indices().exists(request, RequestOptions.DEFAULT);
    System.out.println(is);
}
3、删除索引库
@Test
void deleteTestIndex() throws IOException {
    /*删除索引库*/
    //1.创建Request对象,名称必须为小写字母
    DeleteIndexRequest request = new DeleteIndexRequest("test_index");

    //2.发请求
    client.indices().delete(request, RequestOptions.DEFAULT);
}

4、文档的操作

1、创建文档
@Test
void createDocTest() throws IOException {
    //从数据库中获取数据对象
    Employee employee = employeeMapper.selectAllById(1);

    //1. 创建Request对象
    IndexRequest request = new IndexRequest("test_index").id(employee.getId().toString());

    //2.准备json文档
    String source = JSON.toJSONString(employee);
    //2.1准备json文档
    request.source(source, XContentType.JSON);

    //3.发请求
    client.index(request, RequestOptions.DEFAULT);
}
2、获取指定的文档
@Test
void getDocTest() throws IOException {
    //1.创建Request对象
    GetRequest request = new GetRequest("test_index","1");
    //2.发请求,得到结果
    GetResponse response = client.get(request, RequestOptions.DEFAULT);
    //3.解析结果
    String json = response.getSourceAsString();
    System.out.println(json);
    Employee employee = JSON.parseObject(json, Employee.class);
    System.out.println(employee);
}
3、更新文档
@Test
void updateDocTest() throws IOException {
    //1.创建Request对象
    UpdateRequest request = new UpdateRequest("test_index","1");

    //2.准备DSL语句
    request.doc(
        "age",18
    );

    //3.发请求
    client.update(request,RequestOptions.DEFAULT);
}
4、删除文档
@Test
void deleteDocTest() throws IOException {
    //1.创建Request对象
    DeleteRequest request = new DeleteRequest("test_index","1");
    //2.发请求
    client.delete(request,RequestOptions.DEFAULT);
}
5、批量操作(创建)
@Test
void batchCreateDocTest() throws IOException {
    //1.创建Request对象
    BulkRequest request = new BulkRequest();

    //2.准备DSL语句,批量增加文档
    List<Employee> employees = employeeMapper.selectAll();
    for(Employee e : employees){
        request.add(new IndexRequest("test_index")
                    .id(e.getId().toString())
                    .source(JSON.toJSONString(e),XContentType.JSON));
    }

    //3.发请求
    client.bulk(request,RequestOptions.DEFAULT);
}

5、搜索文档

1、分词查询-查询全部
@Test
void matchAllTest() throws IOException {  //分词查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2.组织DSL参数
    request.source() // 查询全部
        .query(QueryBuilders.matchAllQuery());

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
2、分词查询-指定字段
@Test
void matchQueryTest() throws IOException { //分词查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2.组织DSL参数
    request.source() //查询指定字段的值,也可以指定多个字段 .multiMatchQuery()
        .query(QueryBuilders.matchQuery("name","晨"));

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
3、精确查询
@Test
void termQueryTest() throws IOException {  //精确查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2.组织DSL参数
    request.source() //精确查询只能查询 非text(分词字段),如果查询分词字段,则自动采用模糊分词查询
        .query(QueryBuilders.termQuery("age","33"));

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
4、范围查询
@Test
void rangeQueryTest() throws IOException {  //范围查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2.组织DSL参数
    request.source() //范围查询,gte:大于等于,lte:小于等于,gt:大于,lt:小于
        .query(QueryBuilders.rangeQuery("age").gte(30).lte(35));

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
5、复合查询
@Test
void boolQueryTest() throws IOException {  //复合查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2.1创建复合查询对象
    BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();

    //2.2添加查询条件
    boolQuery.must(QueryBuilders.matchQuery("name","雨"));
    boolQuery.filter(QueryBuilders.rangeQuery("age").gte(20).lte(35));

    //2.3组织DSL参数
    request.source()
        .query(boolQuery);

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
6、分页排序查询
@Test
void pageSortQueryTest() throws IOException {  //分页、排序查询
    // 页码,每页大小
    int page = 3,size = 10;

    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2组织DSL参数
    request.source()
        .from((page-1)*size) // 包含form,(page-1)*size,是前端传过来的页码和每页条数
        .size(size)
        .sort("id", SortOrder.ASC)
        .query(QueryBuilders.matchAllQuery());

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);
        System.out.println(employee);
    }
}
6、高亮查询
@Test
void highLightQueryTest() throws IOException {  //高亮查询
    //1.准备Request
    SearchRequest request = new SearchRequest("test_index");

    //2组织DSL参数
    request.source()
        .highlighter(new HighlightBuilder() //高亮显示
                     .field("name") //字段名
                     .requireFieldMatch(false) // 是否与查询字段匹配
                    ) // 用的默认标签 <em></em>
        .query(QueryBuilders.matchQuery("name","晨"));

    //3.发送请求
    SearchResponse response = client.search(request,RequestOptions.DEFAULT);

    //4.解析结果
    SearchHits searchHits = response.getHits();

    //4.1获取总条数
    long total = searchHits.getTotalHits().value;
    System.out.println("总共有:" + total + "条数据");

    //4.2获取文档数组
    SearchHit[] hits = searchHits.getHits();

    //4.3遍历数组
    for(SearchHit h : hits){
        String json = h.getSourceAsString();
        Employee employee = JSON.parseObject(json, Employee.class);

        // 高亮显示,因为每条数据都是带有 晨 的,所以每条数据都有一个HighlightField用于替换
        HighlightField name = h.getHighlightFields().get("name");

        //替换
        employee.setName(name.getFragments()[0].toString());

        System.out.println(employee);
    }
}
Vivado FIR Complier_IP核使用方法 文章依靠该IP核对应手册PG149写的,因为笔者需求简单,没有深入挖掘功能,可以自行下载学习。 阅读详情

相关推荐

从原理到实践:手把手教你用XY2-100协议控制激光振镜(含引脚定义图)

本文详细解析了XY2-100协议在激光振镜控制中的应用,从硬件接口定义到时序分析,再到Verilog硬件逻辑实现,提供了完整的开发指南。通过实际案例和优化策略,帮助开发者快速掌握高精度激光振镜控制技术,提升加工质量和效率。

weixin_30505225的博客 403

ES(ElasticSearch)的安装(依赖)

》》》因为内部的分词器是没有中文的所有要自己加一个 在GitHub找一个ik 寻找对应的版本 下载

weixin_45980070的博客 2708

Star CCM+中的物性参数(定值、多项式、查表)

仿真过程中我们一定会遇到设置物性参数的问题,对于固定的物性参数还好说,直接输入一个固定的值即可。但是对于冷却液、气体、两相流等,物性参数是随着温度或温度和压力变化的。此时就涉及到多项式和查表。首先创建物理连续体,选择计算模型。

2201_75375391的博客 2960

ElasticSearch

ElasticSearch

小钟不想敲代码 6719

手把手教你用三菱PLC控制JET伺服原点:从硬件接线到GXWORKS3程序调试

本文详细介绍了如何使用三菱PLC控制JET伺服系统实现原点回归功能,涵盖硬件接线、参数配置到GX Works3程序调试的全流程。通过实战指南,帮助工程师快速掌握伺服控制技术,提升工业自动化项目的实施效率。

weixin_30642561的博客 535

别再手动写ZPL了!用C#和斑马官方SDK搞定ZT410 RFID打印机(附中文乱码解决方案)

本文详细介绍了如何使用C#和斑马官方SDK驱动ZT410 RFID打印机,解决中文乱码和RFID数据写入等常见问题。通过实战指南,开发者可以快速掌握从基础连接到高级调试的全流程,提升打印效率和可靠性。特别适用于物流、零售和资产管理领域的应用。

weixin_29267307的博客 225

SpringBoot集成elasticsearch实战

一、添加elasticsearch依赖 二、配置elasticsearch地址 三、编写配置类配置访问对象RestHighLevelClient 四、elasticsearch基本操作(索引创建,文档增删改查,文档批量新增,精确查询、匹配查询)

AllenLuoYi的博客 636

轴承故障诊断领域的论文到底有多水

这个是最让人困惑的,就好像你说自己证明了某个方法更好,但是你却没有交代自己怎么做的,或者说你交代的过程有外行话或者逻辑上的缺陷,但是你就这么给出个结果完事了。由于自己没有足够大的学术交流圈子,为了尽量避免误判,我在原来13篇论文的基础上又读了18篇,这些论文至少都出自中文核心,有一些还有EI的title,事实上近几年能找到的文章也不算多,这些基本能说明问题了。当然,还有更多细节,比如说损失函数你得交代吧,模型超参数得介绍全吧,至少数据集是哪个工况下的得说吧,当你想复现这些论文,关注点在这些地方的时候。

weixin_50642818的博客 3053

SpringBoot整合ElasticSearch

索引数据CRUD操作(一) 在com.yx.respository包下⾃定义ProductRepository接⼝,并继承ElasticsearchRespository接⼝。 1.创建索引数据 批量创建 查询索引数据 根据id查询数据 查询所有数据

weixin_62907807的博客 3611

本文将详细介绍如何在 Qt (C++) 应用程序中集成 osgEarth,加载三维数字地球,并在指定经纬度添加三维模型(如飞机、建筑等)。

OSG 与 Qt 的交互通常需要处理 OpenGL 上下文。osgEarth 3.x 提供了对 Qt 的较好支持,或者可以使用。在普通 OSG 程序中,你需要手动处理坐标系转换将经纬度转为笛卡尔坐标 (XYZ)。这是实现的关键,将 OSG 的渲染循环集成到 Qt 的事件循环中。第三方库,但在本教程中,我们将展示一种通过继承。,将 Qt 的输入事件转换为 OSG 理解的。事件,这是实现交互(旋转地球、缩放)的基础。来嵌入 OSG 视图的标准方法。在这里我们初始化地球并添加模型。节点简化了这一过程。

qq_45859163的博客 1046

手把手教你玩转CPU微架构--​第三章:乱序执行的“魔法”——如何让指令“插队”提升效率​​3.4 动手实验:用Gem5模拟器分析乱序执行对IPC的提升(对比顺序执行)

摘要:本章通过Gem5模拟器对比乱序执行(O3CPU)和顺序执行的性能差异,实验采用SPECCPU2017和PARSEC3.0基准测试,配置7级流水线、4指令/周期发射宽度及多级缓存。结果显示,乱序执行平均提升IPC超过100%,关键因素包括动态指令调度、缓存命中率提升(L1达92%)和TAGE分支预测(准确率95%)。优化方向包括增大指令缓存和发射队列深度。实验验证了乱序执行在减少流水线停顿和提升吞吐量方面的显著优势。

MHD0815的博客 165

01.Elasticsearch应用(一)

Elasticsearch应用

weixin_43891622的博客 1367

第八章 GPU Scheduler 分析:8.3 drm_sched_entity — 调度实体

本文介绍了DRM GPU调度器中的drm_sched_entity结构,它作为用户提交命令进入调度器的提交通道,解决了归属、排序和公平性问题。文章首先分析了命令提交的归属需求,然后详细阐述了entity的核心模型,包括其职责、进程映射关系和核心字段。接着说明了用户态提交进入内核后的关键节点路径,以及entity内部的FIFO语义和激活机制。entity通过组织同一context的命令提交包为FIFO队列,使调度器能够在多个entity之间进行优先级和公平性调度,同时保证同一提交通道的顺序执行。

图形/计算GPU的驱动与虚拟化技术分享园地 658

ElasticSearch学习笔记一:简单使用

该系列的文章用于记录本人从0学习ES的过程,首先会对基本的使用进行讲解。本文默认已经安装了ES单机版本(当然后续也会有对应的笔记),且对ES已经有了相对的了解,闲话少叙,书开正文。ES是Elasticsearch的缩写,是一个基于Lucene的开源全文搜索引擎,提供了分布式、多租户、全文搜索、实时数据分析等功能。ES使用Java语言编写,可以通过RESTful API进行访问和操作,具有快速、可扩展、高可用等特点,是当前最受欢迎的搜索和分析引擎之一。

仔哥学编程 1345

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

ES学习笔记 ElasticSearch 聚合的简单使用

ES的聚合有两个概念,桶和指标 其中,桶简单来说就是满足特定条件的文档的集合,类似于mysql中的group by 而指标就是简单的数学运算(例如最小值、平均值、最大值,还有汇总),这些是通过文档的值来计算的。类似于mysql中的sum,count等 聚合 是由桶和指标组成的。 聚合语句的格式为 可以参考官网 curl -X GET "localhost:9200/cars/transactions/_search?pretty" -H 'Content-Type: application/json' -d

qj4865的博客 323

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

ElasticSearch学习之(八)--简单ES项目构建

该博文主要描述springboot 集成ES7.3.0版本的项目构建,以及简单的数据同步功能实现。废话不多说直接上干货! 1. 初始化springboot项目,引入elastic search 7.3.0的pom依赖。 <!--elasticsearch相关依赖--> <dependency> <groupId>or...

辉哥的博客 621

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

elasticsearch学习javaAPI:es简单搜索

1.javaAPi进行条件搜索import java.net.InetAddress; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.settings.

刘大磊的博客 488

学习ES搜索引擎(一)--Mac安装ES和Kibana及简单实用

最近打算研究下ES和Kibana,打算先自己安装学习一下。通常我们服务器会通过log4j会把服务器日志输出到到控制台上来或者log文件中。但是如果是分布式系统,我们查看日志会很不方便,所以我们可以通过es+logstash+kibana来管理日志,首先通过logstash来将log文件写入到es中,然后通过kibana终端来搜索es中的日志 1.安装ES mac下安装软件非常方便,我们只需要输入下面命令即可安装 brew install elasticsearch 安装完毕后输入下面命令就可以启动elas

装睡的小5郎的博客 2964

ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成

ES入门学习:ElasticSearch、Kibana、ik分词器的安装、简单使用及SpringBoot集成

雅俗共赏的博客 6068

ES学习笔记2:快速入门Elasticsearch,功能、概念、安装、简单案例

1,Elasticsearch的功能 (1)分布式的搜索引擎和数据分析引擎 搜索功能:百度、Google等站内搜索,IT系统的检索 数据分析:电商网站,热销口红产品排名前十的商家;新闻网站,最近一周阅读量前三的新闻; 分布式(体现在集群、节点上)、搜索;数据分析 (2)全文检索,结构化检索,数据分析 全文检索:想搜索商品名称包含“口红”的商品,select * from product...

Joye-joy的博客 412

ElasticSearch学习随笔之简单操作

ElasticSerarch学习随笔之简单操作 ElasticSearch,创始人 Shay Banon(谢巴农) 本文主要讲解ElasticSearch 基础操作,Kibana 以及 java api 调用操作。 文章目录ElasticSerarch学习随笔之简单操作ElasticSearch,创始人 Shay Banon(谢巴农) 本文主要讲解ElasticSearch 基础操作,Kibana 以及 java api 调用操作。前言一、分词器测试二、索引的增删改2.1 新建索引2.1.1 新建最简单

qq_19283249的博客 3028

ES学习——ES评分简单介绍

当我们能使用match来搜索匹配数据的时候,es会给每一个文档进行评分(匹配度),并根据评分的大小对结果文档进行排序。 介绍 es的实时评分机制是基于 Lucene 的基础上实现的,最常见的是 TF/IDF和BM25这两种评分模型。 TF-IDF属于向量空间模型,而BM25属于概率模型,但是他们的公式可能并没有你想象的那么大差距。两种相似度模型都使用idf方法和tf方法的某种乘积来定义单个词项的权...

lkj41110的博客 7647

简单的elasticsearch介绍学习记录

简单上传记录一下自己学习es的过程笔记,方便日后复习查看

qq_19342829的博客 677

Elasticsearch学习(一)————简单命令

Elasticsearch 一.简介 **Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一,Wikipedia、Stack Overflow、GitHub 等都基于 Elasticsearch 来构建他们的搜索引擎。** 二.简单命令 注意:k...

qq_42513284的博客 445

ES的简单学习

使用docker 安装 附上路径。

qq_41949481的博客 335

【ES】Elasticsearch学习

官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/targz.html。参考:https://blog.youkuaiyun.com/smilehappiness/article/details/118466378。

zt0612xd的博客 581
上一篇: Rabbimq的基本使用(Java版本)
下一篇: 面试专栏-01-MySQL知识点(第一部分)
o独酌o
博客等级 码龄3年 324粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值