ElasticSearch入门到springboot使用

Elasticsearch 7.6 - Springboot应用基础操作篇 上文已经说了基础的API操作,那么在java中要如何实现呢?本文就是在Springboot框架下实现索引、映射、一系列查询(高亮、精准、聚合、分词、排序、分页)、批量操作等 阅读详情

文章目录

文章整理自:狂神说-es

1.存储引擎产品性能对比

1.Lucence
是一套信息检索工具包,jar包!不包含搜索引擎系统
包含:索引结构、读写索引的工具、排序、搜索规则等工具类

2.Lucence与ElasticSearch关系
ElasticSearch是基于Lucence做了一些封装和增加(上手简单)

3.ElasticSearch与solr的区别
性能对比:以下5图进行了对比
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
ElasticSearch VS solr 总结
1.es基本是开箱即用(解压就可以使用),非常简单。solr安装略微复杂
2.solr利用zookeeper进行分布式管理,而es自身带有分布式协调管理功能
3.solr支持更多数据格式,如JSON、XML、CSV,而es仅支持json文件格式(少而精)。
4.solr官方提供的功能更多,而es本身更注重于核心功能,高级功能多有第三方插件提供(如ik分词器,图形化界面需要kinaba支持)
5.solr查询快,但更新索引时慢(即插入/删除慢),用于电商等查询多的应用;

  • es建立索引快(即查询慢),即时查询快,用于facebook、新浪等搜索
  • solr是传统搜索应用的解决方案,但es更适用于新兴的实时搜索应用
    6.solr比较成熟,有个更大,更成熟的用户、开发和贡献社区,而es相对开发维护者少,更新太快,学习使用成本较高

2.es安装

环境要求:jdk 1.8及以上、es客户端、界面工具
java开发,es的版本和jdk版本要对应
es与kinaba下载版本要一致

1.创建目录

# 创建目录
#es
mkdir -p /opt/apps/es/elasticsearch/{config,data,plugins}

# kibana
mkdir -p /opt/apps/es/kibana/config

2.创建挂载的配置文件

es配置文件:
vi /opt/apps/es/elasticsearch/config/elasticsearch.yml

http.port: 9200
http.host: 0.0.0.0

http.cors.enabled: true
http.cors.allow-origin: "*"

kibana配置文件
vi/opt/apps/es/kibana/config/kibana.yml

server.name: kibana
# kibana的主机地址 0.0.0.0可表示监听所有IP
server.host: "0.0.0.0"
# kibana访问es的URL
elasticsearch.hosts: [ "http://localhost:9200" ]
#elasticsearch.username: 'kibana'
#elasticsearch.password: '123456'
# 显示登陆页面
#xpack.monitoring.ui.container.elasticsearch.enabled: true
# 语言
i18n.locale: "zh-CN"

3.编写docker-compose

vi /opt/apps/es/docker-compose.yml

version: '3'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3
    container_name: elasticsearch
    environment:
      - "discovery.type=single-node"
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - ./elasticsearch/data:/usr/share/elasticsearch/data 
      - ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
    ulimits:
      memlock:
        soft: -1
        hard: -1
    ports:
      - 9200:9200
      - 9300:9300
    restart: always
    network_mode: 'host'
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.3
    volumes:
      - ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    environment:
      - ELASTICSEARCH_URL=http://localhost:9200
    ports:
      - 5601:5601
    restart: always
    network_mode: 'host'

  es-head:
    image: tobias74/elasticsearch-head:6
    container_name: es-head
    restart: always
    ports:
      - "9100:9100"

4.添加文件夹权限

chmod -R 777 /opt/apps/es/elasticsearch/data

5.启动es与kibana

cd /opt/apps/es
docker-compose up -d

6.开放端口

firewall-cmd --add-port=9200/tcp --permanent
firewall-cmd --add-port=5601/tcp --permanent
firewall-cmd --reload

7.测试访问

es访问地址:
http://ip:9200/
http://192.168.229.132:9200/

kibana访问地址:
http://ip:5601/
http://192.168.229.132:5601/

es-head访问地址:
http://192.168.229.132:9100/

8.安装IK分词器

# 进到es plugins的目录
cd /opt/apps/es/elasticsearch/plugins/

# 创建ik 目录
mkdir ik

# 进到ik
cd /opt/apps/es/elasticsearch/plugins/ik

# 下载方式1:分词器,很慢; 
wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip

#下载方式2:可以windows直接下载zip包后上传到linux。
# 在谷歌浏览器输入
#https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.9.3/elasticsearch-analysis-ik-7.9.3.zip

# 解压分词器
unzip elasticsearch-analysis-ik-7.9.3.zip

#重启es
docker restart 容器id

kibana入门教程

3.es核心概念

集群、节点、索引、类型、文档、分片、映射是什么

es是面向文档,关系型数据库和es概念对比

在这里插入图片描述
es集群中可包含多个索引(数据库),每个索引中可以包含多个类型(表),每个类型下又包含多个文档(行),每个文档中又包含多个字段(列)

**物理设计 **:
es在后台把每个索引划分成多个分片,每份分片可以在集群中不同的服务器进行迁移

** 逻辑设计**:

1.文档:就是一条数据

es是面向文档的,意味着索引和搜索数据的最小单位是文档,es中文档有几个重要属性

  • 自我包含,一篇文档同时好汉字段和对应的值,也就是同时包含key:value
  • 可以是层次型的,一个文档中包含自文档,复杂的逻辑实体就是这么来的(就是json对象,通过fastjson自动转换)
  • 灵活的结构,文档不依赖预先定义的模式,在关系型数据库中,要提前定义字段才能使用,在es中对于字段是非常灵活的,有时候,我们可以忽略该字段,或者动态添加一个新的字段

尽管可以随意的新增或忽略某个子弹,但是每个字段的类型非常重要,比如年龄字段类型,可以是字符或整形。
因为es会保存字段和类型之间的映射及其他的设置。这种映射具体到每个映射的每种类型,这也是为什么在es中,类型有时候也称为映射类型

2.类型:表字段和类型

3.索引:就是数据库

物理设计:
一个集群至少一个节点,而一个节点就是一个es进程,默认的节点可以有多个索引,如果创建索引,索引将会由5个分片构成(主分片),每个主分片会有一个副本(复制分片)

如下创建了1个索引:P,副本R,分片结果如下:
在这里插入图片描述
上图是一个有3个节点的es集群,可以看到主分片和对应的复制分片都不会再同一个节点内,这样就利于某个节点挂了,数据也不至于丢失。实际上,一个分片就是一个lucence索引,一个包含倒排索引的文件目录,倒排索引的结构使得es在不扫描全部文档的情况下,就能知道哪些文档包含特定的关键字。

倒排索引,优化效率

es使用的一种称为倒排索引的结构,采用lucence倒排索引作为底层。这种结构试用与快速的全文搜索,一个索引由文档中所有不重复的列构成,对于每一个词,都有一个包含他的文档列表。例如现有两个文档,内容如下

sduty every day , good good up to forever # 文档1包含的内容
To forever ,study every day ,good good up  # 文档2包含的内容

为了创建倒排索引,我们首先要将每个文档拆分成独立的词语(或称为词条或tokens),然后创建一个包含所有不重复的词条的排列,单号列出每个词条再哪个文档:
在这里插入图片描述
现在试图搜索to forever,需要查看包含每个词条的文档,如下:
在这里插入图片描述

具体例子:
如现在要搜索linux,那么就根本不会去查询id为1和2的文档,效率非常高
在这里插入图片描述

4.IK分词器

1.概念

分词:即把一段中文或别的划分成一个个关键字,在搜索时候会把自己的信息进行分词,会把数据库中或索引库中的数据进行分词,然后进行一个匹配操作,默认的中文分词是每个字分为一个词;
比如“小鸡爱吃大米”会分成“小、鸡、爱、吃、大、米”,这显然无法达到分词要求,所以需要安装中文分词起ik分词器来解决

IK提供了两个分词算法:ik_smart和ik_max_word,其中ik_smart为最少切分,ik_max_word为最细粒度切分

2.安装

1.ik分词器下载
2.下载后放到es插件包即可
3.解压就可以使用
4.重启es相关服务
在这里插入图片描述

3.测试

kibana上进行操作,测试ik分词器

3.1 ik_smart:最少切分

在这里插入图片描述

3.1 ik_max_word:最细粒度切分

在这里插入图片描述

3.3 ik分词器增加自定义 名词

现象:如“别搞了”,希望分词时出现“别搞了”
在这里插入图片描述
处理方式:

3.3.1 在ik目录下增加自己词典

当前目录ik分词器配置目录如下:

/opt/apps/es/elasticsearch/plugins/ik/config

在这里插入图片描述
增加词典:bie.dic

3.3.1 在词典中增加 名词
vi bie.dic
别搞了
#保存
3.3.2 将词典配置到ik配置中

配置文件名:IKAnalyzer.cfg.xml
在这里插入图片描述

3.3.4 重启es,重新加载ik
3.3. 再次测试“别搞了”

在这里插入图片描述

5.Rest风格说明

一种软件架构风格,而不是标准,只是提供了一组设计原则和约束原则。它主要用于客户端和服务器交互类的软件。基于这个风格设计软件可以更加简洁,更有层次,更易于实现缓存等机制。

在这里插入图片描述

6.索引(表)基本操作

6.1 创建

put创建索引

PUT /索引名/类型名/文档id #未来类型名会被去掉
{请求提}

在这里插入图片描述

kibana索引管理:http://192.168.229.132:5601/app/management/data/index_management/indices
在这里插入图片描述

es-head查看索引
在这里插入图片描述

6.2 修改

设定数据类型
为testbie2索引的字段指定数据类型
在这里插入图片描述

获取规则
GET testbie2
在这里插入图片描述
GET命令查看es索引情况
在这里插入图片描述
PUT修改,body里面的类容就是最终值(更新所有)
修改之前testbie/test/1的值,version代表修改版本变化次数
在这里插入图片描述
GET验证修改是否成功:
在这里插入图片描述
post更新/新增
_update后缀,只更新出现的属性
在这里插入图片描述
没有_update后缀,依然是更新所有的属性
在这里插入图片描述

6.3 删除

DELETE删除

删除索引,后缀精确到索引;删除文档行,后缀精确到文档行
在这里插入图片描述

7.文档(数据行)基本操作

7.1 简单查询

GET

GET testbie/test/_search?q=name:别

在这里插入图片描述

7.2 复杂查询

select (排序、分页、高亮、模糊查询、精准查询)
查询匹的配度:_score(权重)
在这里插入图片描述

GET复杂查询语法

GET /索引/类型/_search
{ 
#具体查询条件
}

如下图:
在这里插入图片描述
其中hits对应java中的Hits对象,包含以下内容

hit:
1.索引和文档信息
2.查询的结果总数
3.查询出来的具体文档信息
4.查询的数据都可以遍历出来
5.分数越大匹配度越大

返回指定的文档属性

_source与query平级
在这里插入图片描述

排序

sort,与query平级
sort排升序:
在这里插入图片描述

分页

一定要有这两个参数,相当于mysql的limit两个参数
from:0 #从哪里开始
sizi: 10 #取多少条值

在这里插入图片描述

布尔值查询

多条件bool值查询,
must匹配相当于mysql的and操作,所有条件都要符合
must_not 匹配相当于mysql的 != 操作
should 匹配相当于mysql的or操作
在这里插入图片描述

过滤

filter与must平级
gt大于,lt小于,gte大于等于,lte小于等于
在这里插入图片描述

多条件查询

match自带模糊查询,多个条件用空格隔开
在这里插入图片描述

精确查询

term:精确查询
match:模糊查询
term与match平级

两个类型,在设定字段类型时要注意
text:会被分词器解析成多个词
keyworkd:不会被分词器解析
在这里插入图片描述

多条件精确查询

在这里插入图片描述

高亮查询

highlight与query平级,高亮的字段都会用"em"标签包裹返回
在这里插入图片描述
自定义高亮标签:
在这里插入图片描述

8.springboot集成es

es官网 https://www.elastic.co/guide/index.html#viewall
es客户端:
在这里插入图片描述
使用java rest客户端
在这里插入图片描述
es使用java rest客户端对应官方文档:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/index.html

1.添加pom依赖

依赖版本需要和es服务端版本一致

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.9.3</version>
</dependency>

2.找对应的Java对象

在这里插入图片描述

3.分析RestHighLevelClient对象的方法

略

4.es java API操作

1.创建空项目

2.添加springboot innilizer

3.添加默认Developere Tools

4.添加spring data es

5.配置javac的环境1.8,javascript环境es6

在这里插入图片描述

6.更改springboot版本

在这里插入图片描述

7.查看es依赖版本是否与es服务端7.9.3一致

在这里插入图片描述
版本不匹配

8.自定义es依赖版本

在这里插入图片描述

9.再次查看es版本是否已经依赖成功

在这里插入图片描述

10.简单分析es客户端源码

在这里插入图片描述
核心类:RestClietConfigartions

11.配置RestHighLevelClient对象

package com.bie.config;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author bjh
 * @date 2022/12/9
 */

@Configuration
public class ElasticSearchClientConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("192.168.229.132", 9200, "http")));
        return client;
    }
}

12.java代码es创建数据

package com.bie;

import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.indices.CreateIndexRequest;
import org.elasticsearch.client.indices.CreateIndexResponse;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import java.io.IOException;

/**
 * es 7.9.3客户端api测试
 */
@RunWith(SpringRunner.class)
@SpringBootTest
public class JavaEsApiApplicationTests {

    @Autowired
    @Qualifier("restHighLevelClient")
    private RestHighLevelClient client;

    /**
     * 创建索引
     * Request
     */
    @Test
    public void createIndex() throws IOException {
        // 1.创建索引请求
        CreateIndexRequest bieIndex = new CreateIndexRequest("bie_index");
        // 2.执行索引请求
        CreateIndexResponse createIndexResponse =
                this.client.indices().create(bieIndex, RequestOptions.DEFAULT);

        System.out.println(createIndexResponse.toString());
    }
}

13.查看es是否插入成功:成功

在这里插入图片描述

14.获取索引

/**
     * 获取索引
     * @throws IOException
     */
    @Test
    public void getIndex() throws IOException {
        // 1.创建获取索引请求
        GetIndexRequest bieIndex = new GetIndexRequest("bie_index");
        // 2.执行索引请求
        boolean exists = this.client.indices().exists(bieIndex, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

15.删除索引

/**
     * 删除索引
     *
     * @throws IOException
     */
    @Test
    public void deleteIndex() throws IOException {
        // 1.创建获取索引请求
        DeleteIndexRequest bieIndex = new DeleteIndexRequest("bie_index");
        // 2.执行索引请求
        boolean isDeleteSuccess = this.client.indices().delete(bieIndex, RequestOptions.DEFAULT).isAcknowledged();
        System.out.println(isDeleteSuccess);
    }

16.创建文档

 /**
     * 添加文档
     *
     * @throws IOException
     */
    @Test
    public void addDoc() throws IOException {
        // 1.创建 索引请求对象
        IndexRequest indexRequest = new IndexRequest("bie_index");
        indexRequest.timeout(TimeValue.timeValueSeconds(1));
        indexRequest.id("1");

        // 2.创建user对象
        User user = new User();
        user.setAge(18);
        user.setName("java从入门到入魔");

        // 3.对象数据转json
        indexRequest.source(JSON.toJSONString(user), XContentType.JSON);

        // 4.执行请求
        IndexResponse response = this.client.index(indexRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());  // 返回操作的状态,初次是CREATED,后续修改返回OK
        System.out.println(response.toString());
    }
    
    /**
     * 获取文档,判断是否存在
     *
     * @throws IOException
     */
    @Test
    public void docExist() throws IOException {
        //1.创建索引请求对象
        GetRequest getRequest = new GetRequest("bie_index", "2");
        //不获取返回的_source上下文,效率高
        getRequest.fetchSourceContext(new FetchSourceContext(false));
        //不排序
        getRequest.storedFields("_none_");

        // 2.执行请求
        boolean exists = this.client.exists(getRequest, RequestOptions.DEFAULT);
        System.out.println(exists);
    }

17.crud文档


    /**
     * 获取文档信息
     */
    @Test
    public void getDoc() throws IOException {
        //1.创建索引请求对象
        GetRequest getRequest = new GetRequest("bie_index", "1");
        //2.执行请求
        GetResponse response = this.client.get(getRequest, RequestOptions.DEFAULT);
        //3.获取文档内容
        String sourceAsString = response.getSourceAsString();
        System.out.println(sourceAsString);
    }

    /**
     * 更新文档信息
     */
    @Test
    public void updateDoc() throws IOException {
        //1.创建 更新索引请求对象
        UpdateRequest updateRequest = new UpdateRequest("bie_index", "1");
        updateRequest.timeout(TimeValue.timeValueSeconds(1));
        //2.封装修改数据
        UpdateRequest request = updateRequest.doc(JSON.toJSONString(new User().setName("哈哈 java")), XContentType.JSON);
        //3.执行请求
        UpdateResponse response = this.client.update(request, RequestOptions.DEFAULT);
        System.out.println(response);
    }

    /**
     * 删除文档信息
     */
    @Test
    public void deleteDoc() throws IOException {
        DeleteRequest deleteRequest = new DeleteRequest("bie_index", "qVMa-oQBSvq_7IxZDk-f");
        deleteRequest.timeout(TimeValue.timeValueSeconds(1));

        DeleteResponse response = this.client.delete(deleteRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

18.批量操作

/**
     * 批量 操作数据
     */
    @Test
    public void bulkDoc() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout(TimeValue.timeValueSeconds(10));    //数据越多,设置操作时间越大

        List<User> users = Arrays.asList(new User("bie", 18), new User("bie3", 28));
        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(new IndexRequest("bie_index")
                    .id(String.valueOf(i + 1))
                    .source(JSON.toJSONString(users.get(i)), XContentType.JSON));
        }

        BulkResponse response = this.client.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(response.status());
    }

19.搜索

常用搜索

  • 精确查询:TermQueryBuilder
  • 全匹配查询:MatchAllQueryBuilder
  • 分页:sourceBuilder.from();sourceBuilder.size()
  • 高亮:sourceBuilder.highlighter()
/**
     * 搜索
     * 常用查询操作:.
     * <p>
     * 精确查询:TermQueryBuilder
     * 全匹配查询:MatchAllQueryBuilder
     * 分页:sourceBuilder.from();sourceBuilder.size()
     * 高亮:sourceBuilder.highlighter()
     */
    @Test
    public void searchDoc() throws IOException {
        SearchRequest searchRequest = new SearchRequest("bie_index");
        //构建搜索条件
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        //QueryBuilders快速构建查询条件。
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("age", 18);
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(TimeValue.timeValueSeconds(1));

        searchRequest.source(sourceBuilder);

        SearchResponse response = this.client.search(searchRequest, RequestOptions.DEFAULT);
        System.out.println(JSON.toJSONString(response.getHits()));
        for (SearchHit hit : response.getHits().getHits()) {
            System.out.println(JSON.toJSONString(hit.getSourceAsMap()));
        }
    }

9. 实战京东搜索模拟

Spring Boot集成ES7.10 es,springboot 阅读详情

相关推荐

ElasticSearch工程级入门及结合SpringBoot的0到1实战

ElasticSearch工程级入门及结合SpringBoot的0到1实战 文章目录ElasticSearch工程级入门及结合SpringBoot的0到1实战阅前须知环境版本选择部署&开发ES搭建步骤报错&解决方案IK分词器安装ES的可视化工具ElasticHD安装vscode的es插件安装SpringBoot结合ES1.通过ES API创建user mapping (此处代码基于上文的vscode插件)2.pom文件:3.yml文件:4.主启动:5.业务类:5.1.config5.2.be

Obuuu的博客 400

Spring Boot中的Elasticsearch自动配置

Spring Boot中的Elasticsearch自动配置为我们提供了一种快速集成Elasticsearch的方式,使我们可以在Spring Boot应用程序中轻松地使用Elasticsearch。本文介绍了Elasticsearch自动配置的作用、原理和使用方法。我们了解到,Elasticsearch自动配置可以帮助我们轻松地集成Elasticsearch,并提供一些默认的配置,例如连接池、序列化方式、重试机制等,使我们可以更加专注于业务逻辑的实现。

Java徐师兄的博客 3931

13. 搜索引擎-ES-快速入门 + SpringBoot 实战

Elasticsearch(ES)是一个非常强大的分布式的搜索和分析引擎,具备非常多强大功能,可以帮助我们从海量数据中快速找到需要的内容。

princemilo的博客 479

SpringBoot2.3.6整合Elasticsearch7.10.1教程

网上教程多是Elasticsearch旧版本,很多方法已废弃,本文以Elasticsearch 7.10.1,SpringBoot 2.3.6.RELEASE为例说明两者如何整合: 一、添加pom依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-ins

脉脉情缘的博客 1746

香橙派R1 Plus LTS变身无线AP/客户端:手把手教你用RTL8811CU和MT7601U网卡刷OpenWRT

本文详细介绍了如何将香橙派R1 Plus LTS开发板通过RTL8811CU和MT7601U两款USB无线网卡刷入OpenWRT系统,实现无线AP热点发射与客户端接入的双重功能。从硬件选型、驱动安装到双网卡协同配置,提供完整的实战指南,帮助用户快速搭建稳定高效的无线网络解决方案。

weixin_30919429的博客 408

AxMath行间公式转化为office公式求和符号以及编号显示问题

AxMath行间公式转化为office公式求和符号以及编号显示问题问题描述解决方法 问题描述 首先打出axmath公式,如下: 转换后的OfficeMath公式: 字体先不说,word公式字体默认cambria math且无法编辑。比较难受的一点是求和符号与后面的 ai+bi2a_i+b_i^2ai​+bi2​比例不匹配啊!正常的比例应该是: (虽然也不太正常,将就下) 解决方法 点击变换后的office公式右侧,选择更改为"显示" 可以看到,多了一些软回车符号(⬇),如果你想删除它,不要直接选中

weixin_43543177的博客 4649

Springboot整合Elasticsearch7.10.0 RestHighLevelClient

参考文章:https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-document-index.html 一、elasticsearch官方文档说明 该文章,主要是介绍elasticsearch7.x的rest java客户端。 1.1 增(只看原理,后面有完整的工具类) 定义一个request IndexRequest request = new IndexRequest(索引名称);.

宅宅的博客 7538

第二十三章 Nest集成日志框架Winston

Winston是一个非常流行的Node.js日志框架,而Nest.js是一个基于Node.js的后端框架。修改 winston.module.ts 内容如下 添加 forRoot 方法,接收 winston 的 createLogger 方法的参数,返回动态模块的 providers、exports。这里用到了 printf 的 format 函数,它可以自定义打印的日志格式 且使用了chalk 加上了颜色,并且打印了 dayjs 格式化的时间。可以看到控制台打印了自定义的 logger 的自定义。

枫ゞ的博客 1069

ES(Elasticsearch)全文搜索引擎(最全)入门基本语法与在SpringBoot中的实战

一、认识Elasticsearch 1.1、为什么要使用Elasticsearch 虽然在全文搜索领域中,Lucene可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。 但是,Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene的配置及使用非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。 实际项目中,我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们

qq_45989156的博客 3万+

SDRAM控制器——添加读写FIFO

用FIFO实现数据缓存

H19981118的博客 2627

Chipyard------介绍与环境搭建

Chipyard是一个开源的、可扩展的、集成化的芯片设计平台,旨在帮助芯片设计人员快速、高效地开发自己的定制芯片。由伯克利大学架构研究小组开发,它基于Chisel语言和Scala编程语言,提供了一整套硬件设计工具和流程,包括RTL设计、验证、物理布局、仿真等,以及支持多种芯片体系结构的库和模块。

qq_38798111的博客 9479

springboot整合es_[ElasticSearch从入门到场景实战]spring boot集成SpringData操作es

人生起起伏伏,有风光无限日,也有落魄失魂时,人在低谷时,唯有“熬过去,才会赢”前言Elasticsearch的Spring Data是Spring Data项目的一部分,Spring Data Elasticsearch项目提供了对Elasticsearch操作的集成,用于对Elastichsearch文档进行交互并轻松编写访问层代码。01整合Spring Data Elasticsearch创建...

weixin_39626237的博客 363

133、神经渲染与AI RAW:从RAW域到sRGB的端到端学习

去年在调试某款旗舰手机的主摄时,遇到一个让人头疼的问题——夜景模式下,暗部细节虽然保留得不错,但色彩总是偏紫,而且高光边缘有诡异的“水彩感”。ISP的3A统计跑了几十版,降噪强度从0调到100,甚至把去马赛克算法换成了自适应方向插值,问题依旧。后来团队里一位做AI的同事说:“要不试试端到端?从RAW直接出sRGB。”当时我第一反应是“这玩意儿能稳定吗?”结果试了一版,偏紫消失了,高光边缘的伪影也没了。从那以后,我开始认真研究神经渲染与AI RAW这条路线。

sundong_81的博客 33

【ElasticSearch】Elastic Search入门及Spring Boot整合ES

ES基础、安装配置和Spring Boot连接ES

Lawrence 1192

SKUA-GOCAD入门教程-第六节

DisplayElements窗口是用于浏览和处理项目数据的工具,包含多个数据浏览器,如模型列表、对象、未分类对象、属性数据及资源数据。

江洋大葱的博客 983

基于STM32设计的物联网疫苗冷链物流监测系统

本设计基于物联网技术,开发了一套疫苗冷链物流环境监测系统。系统采用STM32F103C8T6作为主控芯片,集成SHT30温湿度传感器、震动传感器、GPS定位模块和4G通信模块,实现对运输环境的温度、湿度及震动状况的实时监测与控制。通过继电器驱动半导体制冷模块和加湿器,系统能够自动调节环境温湿度,保障疫苗运输的安全性。采集的环境数据通过MQTT协议上传至华为云物联网平台,配套开发的Android手机APP和Windows上位机软件基于Qt平台设计,支持远程实时查看环境数据和车辆定位,提升了疫苗冷链运输的智能化

863

springboot+Elasticsearch入门

springboot+ElasticSearch入门 1、使用STS构建项目 2、修改EL的版本 <properties> <java.version>1.8</java.version> <elasticsearch.version>7.10.1</elasticsearch.version> </properties> 增加fastjson <dependency> <groupId>

1853 442

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot中使用Elasticsearch入门教程(上)

Spring Data全家桶中对Elasticsearch也做了集成,本会基于最新的Spring Data Elasticsearch 4.0介绍在spring中对ES的基本使用。

Doit_kang的博客 2318

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

springboot es集成_elasticsearch入门 springboot2集成elasticsearch 实现全文搜索

springboot整合elasticsearch常用的方式有以下三种1,Java API这种方式基于TCP和ES通信,官方已经明确表示在ES 7.0版本中将弃用TransportClient客户端,且在8.0版本中完全移除它,所以不提倡。2,REST Client上面的方式1是基于TCP和ES通信的(而且TransPort将来会被抛弃……),官方也给出了基于HTTP的客户端REST Client...

weixin_39975868的博客 120

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Elasticsearch(一、入门+SpringBoot整合ES+JavaAPI操作ES)

1-今日内容 初识 ElasticSearch 安装 ElasticSearch ElasticSearch 核心概念 操作 ElasticSearch ElasticSearch JavaAPI 2 初识ElasticSearch 2.1 基于数据库查询的问题 数据库搜索存在问题:性能较低、功能比较弱 2.2 倒排索引 倒排索引:将文档进行分词,形成词条和id的对应关系即为反向索引。 以唐诗为例,所处包含“前”的诗句 正向索引:由《静夜思》–>窗前明月光—>“前”字 反向索引:“前”

落日的博客 1万+

ElasticSearch全文搜索引擎入门到入土

ElasticSearch全文搜索引擎,- 全文搜索Lucene入门 - ElasticSearch概述和安装 - ElasticSearch的基本使用 - ElasticSearch在Java中使用

weixin_48133130的博客 747

ES数据存储搜索引擎入门到整合Springboot一章直达

学习一门语言,我们从熟悉其语法开始,慢慢深入动手实践,并开始将其使用到对应的场景上,当我们遇到相应的问题,能够联想到使用该技术,并能够信手拈来的时候,才是我们真正掌握了一门技术或者语言的时候。学习的时候可以和其他学过的知识点相关联,如ES可以与MYSQL特性相关联,就像编程入门从C开始一样,是介于C的语法基础,触类旁通其他语言,下面介绍的是ES的使用场景,语法,和对应的操作过程。代码虐我千百遍,待它如初恋,卖油翁小故事,无他,唯手熟尔。

m0_47594094的博客 1809

Spring Boot 集成 Elasticsearch入门教学

Elasticsearch 是一个分布式搜索引擎,用来处理大规模数据的存储、搜索和分析。它是基于 Apache Lucene 构建的,具备高效的全文搜索功能。ES 可以在海量数据中快速找到匹配的内容,并且支持复杂的查询逻辑,非常适合用于日志分析、商品搜索、数据可视化等场景。

IT界的奇葩 1064

SpringBoot 整合 Elasticsearch 实战——搜索引擎从入门到落地

当 MySQL 的越来越慢,或者你需要做时,Elasticsearch 就是标配方案了。

DoubleZ137的博客 479

springboot整合Elasticsearch快速入门(基于docker安装ES)

安装ES 1,首先安装ES,这里使用docker,拉取镜像,这里选择版本为6.7.1 docker pull elasticsearch:6.7.1 如果下载速度过慢,可配置一下阿里云的镜像加速,本人亲测,配置前后下载速度,是公交车和地铁的区别 2.下载完成后是这样的 3.接下来我们要启动它,ES默认启动需要2G的内存,这边需要设置参数限制一下:docker run -d -e ES_JAVA_...

qq_42839741的博客 391

ES(Elastic Search)入门和springboot结合(一)

ES(Elastic Search)入门和springboot结合ES(Elastic Search)入门和springboot结合1、ES入门1、全文检索概念和ES基本介绍2、安装2.1、下载ES,2.2、创建用户》上传》安装2.3、启动2.4、验证:2.5、ES开启远程连接权限:2.6、启动报错处理: ES(Elastic Search)入门和springboot结合 带你熟悉和了解ES 和结合SpringBoot来编写demo 1、ES入门 1、全文检索概念和ES基本介绍 全文检索:计算机程序通过

q1335882的专栏 413
上一篇: 解决nginx: [emerg] unknown directive “stream“ in /etc/nginx/nginx.conf问题
下一篇: java-爬虫-es
seeyoutlb
博客等级 码龄9年 123粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值