Elasticsearch介绍和使用步骤详解(含详细代码)

这篇具有很好参考价值的文章主要介绍了Elasticsearch介绍和使用步骤详解(含详细代码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Elasticsearch介绍

Elasticsearch(简称ES)是一个开源的、高扩展的分布式全文检索引擎,可以近乎实时地存储、检索数据。它的设计目标是稳定、可靠、快速,并能够轻松地扩展到上百台服务器,处理PB级别的数据。

以下是关于Elasticsearch的详细介绍:

  1. 基于Lucene:Elasticsearch基于Lucene库开发,它使用Lucene作为其核心来实现所有索引和搜索功能。
  2. 实时性:它能够近乎实时地完成数据的存储和检索。
  3. 分布式:为了处理大型数据集并实现容错和高可用性,ES可以运行在许多互相合作的服务器上,这些服务器的集合称为集群。每个服务器在集群中称为节点。
  4. 高可用性:它通过复制机制提供了数据冗余和高可用性,每个索引可以有多个副本来防止数据丢失。
  5. 查询能力:ES支持复杂的全文搜索能力,可以通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单。它还支持使用JSON进行数据索引,查询速度快。
  6. 扩展性:由于其分布式和可扩展的特性,它经常被用于构建大型搜索平台、日志分析系统、以及数据集的实时分析系统等。
  7. 应用广泛:它是当前流行的企业级搜索引擎,广泛应用于各种规模的企业和组织中。
  8. 开放性:Elasticsearch是开源的,可以在Apache许可条款下免费使用和修改。
  9. 语言支持:Elasticsearch提供了丰富的客户端API,支持Java、Python、JavaScript、Ruby、C#、Go等语言。
  10. 集成性:它可以与其他工具和平台集成,例如Logstash、Kibana、Beats等,提供了强大的日志分析功能。

总的来说,Elasticsearch是一个强大、灵活且易于使用的分布式全文检索引擎,广泛应用于各种规模的企业和组织中。

2. Elasticsearch使用

  1. 添加依赖

pom.xml中添加以下依赖:

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-data-elasticsearch</artifactId>  
</dependency>
  1. 配置连接

application.properties中配置Elasticsearch连接信息:

spring.data.elasticsearch.cluster-name=your-cluster-name  
spring.data.elasticsearch.cluster-nodes=your-host:your-port
  1. 定义实体

创建一个实体类,例如Product

import org.springframework.data.annotation.Id;  
import org.springframework.data.elasticsearch.annotations.Document;  
import org.springframework.data.elasticsearch.annotations.Field;  
import org.springframework.data.elasticsearch.annotations.FieldType;  
  
@Document(indexName = "product", type = "product")  
public class Product {  
    @Id  
    private String id;  
    @Field(type = FieldType.Keyword)  
    private String name;  
    @Field(type = FieldType.Keyword)  
    private String description;  
    // getters and setters...  
}
  1. 创建Repository

创建一个继承ElasticsearchRepository的接口:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;  
import org.springframework.stereotype.Repository;  
  
@Repository  
public interface ProductRepository extends ElasticsearchRepository<Product, String> {
}
  1. 使用Repository

在Service或Controller中使用Repository:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.*;

import static org.springframework.data.elasticsearch.core.query.QueryBuilders.*;

import org.springframework.data.domain.*;
import org.springframework.data.elasticsearch.*;
import org.springframework.data.*;
import org.springframework.*;

import java.*;
import java.util.*;
import java.util.*;

public class ProductService {
    private final ProductRepository productRepository;

    @Autowired
    public ProductService(ProductRepository productRepository) {
        this.productRepository = productRepository;
    }

    public Page<Product> findAll(Pageable pageable) {
        return productRepository.findAll(pageable);
    }

    public List<Product> findByName(String name) {
        return productRepository.findByName(name);
    }

    public List<Product> findByDescription(String description) {
        return productRepository.findByDescription(description);
    }
    // other methods...
}
  1. 自定义查询

如果你需要执行更复杂的查询,可以在Repository接口中定义自定义方法,并使用Elasticsearch的Query对象来构建查询条件。例如:

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;  
import org.springframework.stereotype.Repository;  
  
@Repository  
public interface ProductRepository extends ElasticsearchRepository<Product, String> {  
    List<Product> findByCustomQuery(String customQuery);
}

在实现该自定义查询方法时,可以使用Elasticsearch的QueryBuilder来构建复杂的查询条件。例如:文章来源地址https://www.toymoban.com/news/detail-804736.html

public class ProductRepositoryImpl implements ProductRepository {  
    @Override  
    public List<Product> findByCustomQuery(String customQuery) {  
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();  
        // 添加bool查询的must条件,相当于AND查询  
        boolQueryBuilder.must(QueryBuilders.matchQuery("name", customQuery));  
        boolQueryBuilder.must(QueryBuilders.matchQuery("description", customQuery));  
        // 添加bool查询的should条件,相当于OR查询  
        boolQueryBuilder.should(QueryBuilders.termQuery("category", "electronics"));  
        boolQueryBuilder.should(QueryBuilders.termQuery("category", "books"));  
        // 添加bool查询的filter条件,用于过滤不需要的数据,不参与排序和分页等操作,只用于过滤数据。  
        boolQueryBuilder.filter(QueryBuilders.rangeQuery("price").gte(100).lte(500));  
        // 执行查询  
        return elasticsearchTemplate().search(boolQueryBuilder, Product.class)  
                                       .stream()  
                                       .map(SearchHit::getContent)  
                                       .collect(Collectors.toList());  
    }  
}

到了这里,关于Elasticsearch介绍和使用步骤详解(含详细代码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 使用 ElasticSearch 作为知识库,存储向量及相似性搜索

    在当今大数据时代,快速有效地搜索和分析海量数据成为了许多企业和组织的重要需求。 Elasticsearch 作为一款功能强大的分布式搜索和分析引擎,为我们提供了一种优秀的解决方案。除了传统的文本搜索, Elasticsearch 还引入了向量存储的概念,以实现更精确、更高效的相似性

    2024年02月10日
    浏览(47)
  • 【EDA课程设计】FPGA交通信号灯的设计(含动画视频、超详细思路/步骤分析、完整代码与效果详解)

    ✨你好啊,我是 “ 怪 ” ,是一名在校大学生哦。 🌍主页链接:怪的个人博客主页 ☀️博文主更方向为: 课程学习知识、作业题解、期末备考。 随着专业的深入会越来越广哦…一起期待。 ❤️一个“不想让我曾没有做好的也成为你的遗憾”的博主。 💪很高兴与你相遇,

    2023年04月08日
    浏览(61)
  • 使用ElasticSearch完成大模型+本地知识库:BM25+Embedding模型+Learned Sparse Encoder 新特性

    本文指出,将BM25,向量检索Embedding模型后近似KNN相结合,可以让搜索引擎既能理解用户查询的字面意义,又能捕捉到查询的深层次语义,从而提供更全面、更精确的搜索结果。这种混合方法在现代搜索引擎中越来越普遍,因为它结合了传统搜索的精确性和基于AI的搜索的语义

    2024年02月03日
    浏览(67)
  • Windows配置SonarQube代码审查工具详细步骤(附带IDEA SonarLint插件使用)

    本篇博客使用的SonarQube版本为9.8,注意 JDK 1.8已经不能支持 Name Version DownLoad Link SonarQube 9.8 https://www.sonarsource.com/products/sonarqube/downloads/historical-downloads/ JDK 11 https://pan.quark.cn/s/06848544167c PostgreSQL 14.2 https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 更多环境配置请参考:http

    2024年02月09日
    浏览(45)
  • Elasticsearch之聚合查询介绍与使用(附RestAPI代码案例)

    前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将介绍Elasticsearch搜索引擎之聚合查询的介绍与使用,这块内容不作为面试中的重点。 如果文章有什么需要改进的地方还请大佬不吝赐教 👏👏。 小威在此先感谢各位大佬啦~~🤞🤞 🏠个人主页:小威

    2023年04月13日
    浏览(44)
  • vue3 ts element plus form表单二次封装详细步骤 (附参数、类型详细介绍及简单使用示例)

    上篇table 表格封装 讲到项目中经常会用到 table 表格,所以做了封装。当然,form 表单使用的频率依然很高,所以和封装 table 表格的思路相似,对 form 表单也做了一个二次封装的组件。 查看国内预览站 查看国外预览站 1. EasyForm 表单组件封装 src/components/EasyForm/index.vue Form 表单

    2024年02月07日
    浏览(61)
  • 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)

    导  读     本文主要介绍如何在OpenCV中使用EdgeDrawing模块查找圆(详细步骤 + 代码)。 背景介绍     从OpenCV4.5.2开始,Contrib模块中封装了开源库ED_Lib用于查找图像中的直线、线段、椭圆和圆。Github地址:     算法原理简介:     边缘绘制(ED)算法是一种解决边缘检测问

    2024年02月08日
    浏览(69)
  • 在pycharm中使用Git上传代码到Gitee/GitHub(适合新手小白的超级详细步骤讲解)

    因为Gitee和GitHub使用方法差不多,所以本文以将代码上传到Gitee为例,GitHub操作类似。 pycharm:File - Settings - Plugins - 搜索Gitee/GitHub 进行插件的安装 安装好之后该插件会有一个蓝色小箭头表示安装成功。 这个注册非常简单,按照步骤完成注册即可。 点击工具栏中的VCS - Share p

    2024年02月08日
    浏览(59)
  • Docker安装Elasticsearch详细步骤

    1.1 拉取镜像 1.3 为文件夹赋权 1.4 创建并启动容器 1.5 参数解释 1.6 访问服务 使用 IP:9200 进行服务访问,如果出现如下界面,则配置成功 1.7 常见错误 1.7.1 docker启动容器错误:docker: Error response from daemon: OCI runtime create failed 创建时挂载目录时,将 elasticsearch.yml 创建成了目录(应

    2024年02月10日
    浏览(49)
  • Amazon Code Whisperer 的正式使用,全新 AI 代码工具等你发现!(内附详细安装步骤图解)

    文章作者:稚始稚终 关于 Code Whisperer Code Whisperer,亚马逊推出的实时 AI 编程助手,是一项基于机器学习的服务,它可以分析开发者在集成开发环境(IDE)中的注释和代码,并根据其内容生成多种代码建议。 开发者可以用自然语言(目前仅支持英语)描述他们想要实现的功能

    2024年02月04日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包