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月前
|
存储 负载均衡 Java
Elasticsearch集群面试系列文章一
【9月更文挑战第9天】Elasticsearch(简称ES)是一种基于Lucene构建的分布式搜索和分析引擎,广泛用于全文搜索、结构化搜索、分析以及日志实时分析等场景。
79 7
|
2月前
|
存储 缓存 监控
|
10天前
|
JSON Java 网络架构
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
这篇文章介绍了如何使用Spring Boot整合REST方式来搭建和操作Elasticsearch服务。
74 4
elasticsearch学习四:使用springboot整合 rest 进行搭建elasticsearch服务
|
9天前
|
存储 缓存 监控
深入解析:Elasticsearch集群性能调优策略与最佳实践
【10月更文挑战第8天】Elasticsearch 是一个分布式的、基于 RESTful 风格的搜索和数据分析引擎,它能够快速地存储、搜索和分析大量数据。随着企业对实时数据处理需求的增长,Elasticsearch 被广泛应用于日志分析、全文搜索、安全信息和事件管理(SIEM)等领域。然而,为了确保 Elasticsearch 集群能够高效运行并满足业务需求,需要进行一系列的性能调优工作。
27 3
|
12天前
|
SQL 分布式计算 NoSQL
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
大数据-170 Elasticsearch 云服务器三节点集群搭建 测试运行
28 4
|
10天前
|
Web App开发 JavaScript Java
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
这篇文章是关于如何使用Spring Boot整合Elasticsearch,并通过REST客户端操作Elasticsearch,实现一个简单的搜索前后端,以及如何爬取京东数据到Elasticsearch的案例教程。
103 0
elasticsearch学习五:springboot整合 rest 操作elasticsearch的 实际案例操作,编写搜索的前后端,爬取京东数据到elasticsearch中。
|
10天前
|
自然语言处理 Java Maven
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
这篇博客介绍了如何使用Spring Boot整合TransportClient搭建Elasticsearch服务,包括项目创建、Maven依赖、业务代码和测试示例。
37 0
elasticsearch学习二:使用springboot整合TransportClient 进行搭建elasticsearch服务
|
10天前
|
开发框架 监控 搜索推荐
GoFly快速开发框架集成ZincSearch全文搜索引擎 - Elasticsearch轻量级替代为ZincSearch全文搜索引擎
本文介绍了在项目开发中使用ZincSearch作为全文搜索引擎的优势,包括其轻量级、易于安装和使用、资源占用低等特点,以及如何在GoFly快速开发框架中集成和使用ZincSearch,提供了详细的开发文档和实例代码,帮助开发者高效地实现搜索功能。
|
17天前
|
自然语言处理 搜索推荐 Java
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(一)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图
37 0
|
17天前
|
存储 自然语言处理 搜索推荐
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
SpringBoot 搜索引擎 海量数据 Elasticsearch-7 es上手指南 毫秒级查询 包括 版本选型、操作内容、结果截图(二)
22 0