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可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
26天前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
211 1
|
1月前
|
存储 监控 安全
Elasticsearch 集群
【11月更文挑战第3天】
101 54
|
1天前
|
存储 负载均衡 监控
揭秘 Elasticsearch 集群架构,解锁大数据处理神器
Elasticsearch 是一个强大的分布式搜索和分析引擎,广泛应用于大数据处理、实时搜索和分析。本文深入探讨了 Elasticsearch 集群的架构和特性,包括高可用性和负载均衡,以及主节点、数据节点、协调节点和 Ingest 节点的角色和功能。
9 0
|
29天前
|
缓存 监控 Java
Elasticsearch集群JVM调优
Elasticsearch集群JVM调优
43 5
|
26天前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
45 1
|
26天前
|
监控 Java 测试技术
Elasticsearch集群JVM调优垃圾回收器的选择
Elasticsearch集群JVM调优垃圾回收器的选择
46 1
|
29天前
|
监控 安全 网络安全
Elasticsearch集群的网络设置
Elasticsearch集群的网络设置
32 3
|
1月前
|
缓存 监控 安全
优化Elasticsearch 集群配置
优化Elasticsearch 集群配置
68 4
|
29天前
|
存储 监控 固态存储
Elasticsearch集群硬件与资源分配
Elasticsearch集群硬件与资源分配
35 2
|
1月前
|
监控 负载均衡 安全
Elasticsearch集群配置优化
Elasticsearch集群配置优化
31 1
下一篇
DataWorks