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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
1月前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
124 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
23天前
|
JSON Java API
springboot集成ElasticSearch使用completion实现补全功能
springboot集成ElasticSearch使用completion实现补全功能
24 1
|
1月前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
183 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
1月前
|
开发框架 监控 搜索推荐
GoFly快速开发框架集成ZincSearch全文搜索引擎 - Elasticsearch轻量级替代为ZincSearch全文搜索引擎
本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。
121 0
|
4月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
295 6
|
4月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
374 4
|
4月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
327 1
|
5月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
171 2
|
5月前
|
监控 前端开发 Java
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
五分钟后,你将学会在SpringBoot项目中如何集成CAT调用链
|
4月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成
下一篇
无影云桌面