SpringBoot 基础10 Elasticsearch

本文介绍了Elasticsearch的基本概念,阐述了其优势和特性,并通过SpringBoot实战演示了如何搭建Elasticsearch项目,包括配置、实体、服务和控制类的创建,以及与RDBMS的对比。
摘要由CSDN通过智能技术生成

什么是ElasticSearch ?

      基于Lucene的搜索服务器,常被当做一个文档型 NoSQL 数据库在使用
​
     Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎
​
      默认端口:9200 
​

使用 Elastic Search有什么好处?

Elasticsearch可扩展高达PB级的结构化和非结构化数据
Elasticsearch可以用来替代MongoDB和RavenDB等做文档存储。 
Elasticsearch使用非标准化来提高搜索性能。 
Elasticsearch是受欢迎的企业搜索引擎之一,目前被许多大型组织使用,如Wikipedia,The Guardian,StackOverflow,GitHub等。 
Elasticsearch是开放源代码,可在Apache许可证版本2.0下提供
​

Elastic Search有哪些特性?

Elasticsearch是基于Java开发的,这使得它在几乎每个平台上都兼容
 
Elasticsearch是实时的
​
Elasticsearch是分布式的
​
与Apache Solr相比,在Elasticsearch中处理多租户非常容易
​
Elasticsearch使用JSON对象作为响应Elasticsearch支持
​

如何使用 ElasticSearch?

首先用户将数据提交到Elastic Search 数据库中
​
再通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据
​
当用户搜索数据时候,再根据权重将结果排名,打分
​
最后将返回结果呈现给用户
​

新建ElasticSearch项目

ElasticSearch可以从elasticsearch.org下载对应的文件格式(如ZIP和TAR.GZ)
提前安装Java运行时环境
​
所使用的环境是Windows,可从命令窗口运行位于bin文件夹中的elasticsearch.bat
​
启动ElasticSearch在控制台的前台运行,这意味着我们可在控制台中看到运行信息或一些错误信息,并可以使用CTRL + C停止或关闭它•

Elasticsearch和RDBMS之间的比较

在Elasticsearch中,索引是类型的集合,因为数据库是RDBMS(关系数据库管理系统)中表的集合。每个表都是行的集合,就像每个映射都是JSON对象的Elasticsearch集合一样。
Elasticsearch 关系数据库
索引(index) 数据库
碎片 碎片
映射(type)
Document
Field
JSON对象 元组

SpringBoot + Elasticsearch 实战

pom.xml

<!-- Java High Level REST Client -->
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>${elasticsearch.version}</version>
        </dependency>

application.properties

server.port=8833
spring.application.name=my-application
elasticsearch.address=localhost:9200

配置类

@Configuration
@Slf4j
public class ESConfig {
​
    // 地址长度
    private static final int ADDRESS_LENGTH = 2;
    // 地址方式
    private static final String HTTP_SCHEME = "http";
    // 权限验证
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
​
    /**
     * 使用冒号隔开ip和端口
     */
    @Value("${elasticsearch.address}")
    private String[] address;
​
    // @Value("${elasticsearch.username}")
    // private String username;
​
    // @Value("${elasticsearch.password}")
    // private String password;
​
​
    @Bean
    public RestClientBuilder restClientBuilder() {
        HttpHost[] hosts = Arrays.stream(address)
                .map(this::makeHttpHost)
                .filter(Objects::nonNull)
                .toArray(HttpHost[]::new);
        log.debug("hosts:{}", Arrays.toString(hosts));
        // 配置权限验证
        // credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(username, password));
        RestClientBuilder restClientBuilder = RestClient.builder(hosts).setHttpClientConfigCallback(new RestClientBuilder.HttpClientConfigCallback() {
            @Override
            public HttpAsyncClientBuilder customizeHttpClient(HttpAsyncClientBuilder httpClientBuilder) {
                return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
            }
        });
        return restClientBuilder;
    }
​
​
    @Bean(name = "highLevelClient")
    public RestHighLevelClient highLevelClient(@Autowired RestClientBuilder restClientBuilder) {
        // restClientBuilder.setMaxRetryTimeoutMillis(60000);
        return new RestHighLeve
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值