springboot 2.0集成elasticsearch 7.6.2 (集群)关键字高亮显示(上)

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: springboot 2.0集成elasticsearch 7.6.2 (集群)关键字高亮显示

正文


一、搜索入门


1.无条件搜索命令


GET /index/_search


GET /message/_search


111.png


2.传参搜索命令


GET /index/_search?q=filed:value


GET /message/_search?q=id:1424966164936024065


问题扩展: + 和 - 区别(见如下举例说明)


GET /message/_search?q=+id:1424966164936024065 #查询id=1424966164936024065的数据
GET /message/_search?q=-id:1424966164936024065 #查询id!=1424966164936024065的数据


3.分页搜索命令


GET /index/_search?size=x&from=x


GET /message/_search?size=10&from=0
注:类似sql > select * from message 0,10


问题扩展:分页过深,对性能有哪些影响?


1.消耗网络带宽,搜的过深,各分片(shard)要把数据传递给协调节点(coordinating node),这个过程中有大量数据传输,消耗网络
2.消耗内存,各节点(shard)要把数据传给协调节点(coordinating node),这个传递回来的数据,被协调节点(coordinating node)保存在内存中,这样会大量消耗内存
3.消耗cpu,协调节点(coordinating node)要把传回来的数据进行排序,这个排序过程很消耗cpu
因此,出于对深度分页(deep paging)的性能考虑,能少用就尽量少用


二、DSL入门


es所独有的搜索语言(ps:有点类似sql语言),可以在请求体携带搜索条件,功能强大


1.查询全部


举个栗子


GET /message/_search
{
  "query": {
    "match_all": {}
  }
}


注:看到这里,小伙伴们就要问了,es的get请求为什么可以携带请求体?这是因为es对此做出处理,至于是怎么处理的,感兴趣的小伙伴,可以去查阅资料


2.数据排序


举个栗子


GET /message/_search
{
  "query": {
    "match": {
      "desc": "群聊"
    }
  },
  "sort": [
    {
      "createDate": {
        "order": "desc"
      }
    }
  ]
}


3.分页查询


举个栗子


GET /message/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 10
}


4.返回指定字段


举个栗子


GET /message/_search
{
  "query": {
    "match_all": {}
  },
  "_source": ["username","data"]
}


三、Query DSL语法


1.DSL 命令


{
    query_name: {
       argument:value
       ...... 
   }
}
或者
{
    query_name:{
        field_name:{
            argument:value
            ......
        }
    }
}


举个栗子


1. GET /message/_search
2. {
3. "query": {
4. "match": {
5. "desc": "群聊"
6.     }
7.   }
8. }


2.多条件组合搜索


举个栗子


GET /message/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "username": "admin"
          }
        }
      ],
      "should": [
        {
          "match": {
            "desc": "群聊"
          }
        }
      ],
      "must_not": [
        {
          "match": {
            "desc": "私聊"
          }
        }
      ]
    }
  }
}


GET /message/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "sendId": "1363109342432645122"
          }
        }
      ],
      "should": [
        {
          "match": {
            "username": "admin"
          }
        },
        {
          "bool": {
            "must": [
              {
                "match": {
                  "data": "无名,天地之始,有名,万物之母。"
                }
              }
            ]
          }
        }
      ]
    }
  }
}


3.dsl语法


match_all - 举个栗子


GET /message/_search
{
  "query": {
    "match_all": {}
  }
}


match - 举个栗子


GET /message/_search
{
  "query": {
    "multi_match": {
      "query": "生日快乐",
      "fields": ["data","data.pinyin"]
    }
  }
}


range query - 举个栗子


GET /message/_search
{
  "query": {
    "range": {
      "id": {
        "gte": 1359036315055083522,
        "lte": 1359036315055083522
      }
    }
  }
}


term query - 举个栗


GET /message/_search
{
  "query": {
    "term": {
      "username": {
        "value": "admin"
      }
    }
  }
}

terms query -举个栗子


GET /message/_search
{
  "query": {
    "terms": {
      "data": [
        "年年",
        "岁岁"
      ]
    }
  }
}


exists query(查询有默写字段值的文档) - 举个栗子


GET /message/_search
{
  "query": {
    "exists": {
      "field": "remark"
    }
  }
}

full query(返回包含与搜索词类似词的文档) - 举个栗子


生日1 > 生日


GET /message/_search
{
  "query": {
    "fuzzy": {
      "data": {
        "value": "生日1"
      }
    }
  }
}


ids query - 举个栗子


GET /message/_search
{
  "query": {
    "ids": {
      "values": ["1426744462376591362","1426752233562071042"]
    }
  }
}


prefix(前缀查询) - 举个栗子

GET /message/_search
{
  "query": {
    "prefix": {
      "data": {
        "value": "生日快乐"
      }
    }
  }
}

regexp query(正则查询) - 举个栗子


GET /message/_search
{
  "query": {
    "regexp": {
      "data": "生日*"
    }
  }
}


分词搜索 - 举个栗子


GET /message/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "query_string": {
            "default_field": "data",
            "query": "shengri"
          }
        },
        {
          "query_string": {
            "default_field": "data.pinyin",
            "query": "shengri"
          }
        }
      ]
    }
  }
}


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
2天前
|
缓存 安全 Java
Spring Boot 3 集成 Spring Security + JWT
本文详细介绍了如何使用Spring Boot 3和Spring Security集成JWT,实现前后端分离的安全认证概述了从入门到引入数据库,再到使用JWT的完整流程。列举了项目中用到的关键依赖,如MyBatis-Plus、Hutool等。简要提及了系统配置表、部门表、字典表等表结构。使用Hutool-jwt工具类进行JWT校验。配置忽略路径、禁用CSRF、添加JWT校验过滤器等。实现登录接口,返回token等信息。
78 12
|
8天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
46 8
|
1月前
|
XML Java API
Spring Boot集成MinIO
本文介绍了如何在Spring Boot项目中集成MinIO,一个高性能的分布式对象存储服务。主要步骤包括:引入MinIO依赖、配置MinIO属性、创建MinIO配置类和服务类、使用服务类实现文件上传和下载功能,以及运行应用进行测试。通过这些步骤,可以轻松地在项目中使用MinIO的对象存储功能。
|
2月前
|
消息中间件 Java Kafka
什么是Apache Kafka?如何将其与Spring Boot集成?
什么是Apache Kafka?如何将其与Spring Boot集成?
82 5
|
2月前
|
消息中间件 Java Kafka
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
Spring Boot 与 Apache Kafka 集成详解:构建高效消息驱动应用
66 1
|
2月前
|
XML Java 数据库连接
SpringBoot集成Flowable:打造强大的工作流管理系统
在企业级应用开发中,工作流管理是一个核心组件,它能够帮助我们定义、执行和管理业务流程。Flowable是一个开源的工作流和业务流程管理(BPM)平台,它提供了强大的工作流引擎和建模工具。结合SpringBoot,我们可以快速构建一个高效、灵活的工作流管理系统。本文将探讨如何将Flowable集成到SpringBoot应用中,并展示其强大的功能。
452 1
|
2月前
|
消息中间件 监控 Java
您是否已集成 Spring Boot 与 ActiveMQ?
您是否已集成 Spring Boot 与 ActiveMQ?
63 0
|
2月前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
53 1
|
2月前
|
XML 存储 Java
SpringBoot集成Flowable:构建强大的工作流引擎
在企业级应用开发中,工作流管理是核心功能之一。Flowable是一个开源的工作流引擎,它提供了BPMN 2.0规范的实现,并且与SpringBoot框架完美集成。本文将探讨如何使用SpringBoot和Flowable构建一个强大的工作流引擎,并分享一些实践技巧。
271 0
|
3月前
|
前端开发 Java 程序员
springboot 学习十五:Spring Boot 优雅的集成Swagger2、Knife4j
这篇文章是关于如何在Spring Boot项目中集成Swagger2和Knife4j来生成和美化API接口文档的详细教程。
373 1