Elasticsearch连续剧之实战搜索文档

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 前几篇文章中,小编给大家介绍了一些es的基本操作,还有常用分词器的搭建,现在给大家来示范一下es的一些常见文档搜索方式

一、前言

前几篇文章中,小编给大家介绍了一些es的基本操作,还有常用分词器的搭建,现在给大家来示范一下es的一些常见文档搜索方式。

二、准备工作

在学习文档搜索方式前,我们先来创建一个文档,并添加一些文档数据。

tips: 这里的分词器,我们使用的是上篇文章所说的ik分词器

#创建索引
PUT /students
{
  "mappings":{
    "properties":{
      "id": {
            "type": "integer",
        "index": true
       },
         "name": {
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         },
      "info": {
            "type": "text",
            "store": true,
        "index": true,
            "analyzer": "ik_smart"
         }
     }
   }
}
# 添加数据
POST /students/_doc/
{
 "id":1,
 "name":"小白程序员",
 "info":"I love coding"
}
POST /students/_doc/
{
 "id":2,
 "name":"美羊羊",
 "info":"美羊羊是羊村最漂亮的人"
}
POST /students/_doc/
{
 "id":3,
 "name":"懒羊羊",
 "info":"懒羊羊的成绩不是很好"
}
POST /students/_doc/
{
 "id":4,
 "name":"小灰灰",
 "info":"小灰灰的年纪比较小"
}
POST /students/_doc/
{
 "id":5,
 "name":"沸羊羊",
 "info":"沸羊羊喜欢美羊羊"
}
POST /students/_doc/
{
 "id":6,
 "name":"灰太狼",
 "info":"灰太狼是小灰灰的父亲,每次都会说我一定会回来的"
}

三、文档搜索

1.查询所有文档

match:

1.全文检索字符,将查询条件分词后再进行搜索

2.还支持模糊查询,具有自动纠错功能(最多纠错两个字,超过则报错)

#格式
{
    "query":{
    "match_all":{}
   }
}
eg:  查询全部
GET /students/_search
{
  "query": {
    "match_all": {}
  }
}

2.根据关键词模糊查询

#eg1:全文检索 match:将查询条件分词后再进行搜索 
GET /students/_search
{
  "query": {
    "match": {
      "info": "喜欢"
    }
  }
}
#eg2:match还支持模糊查询 还具有自动纠错功能(最多自动纠错两个字符,超过两个报错)
GET /students/_search
{
  "query": {
    "match": {
      "info": {
        "query": "lov",
        "fuzziness": 1
      }
    }
  }
}

3.范围搜索(range)

对数字类型的字符进行范围搜索,这个和数据库的范围限定符类似。

#格式
{
    "query":{
    "range":{
      搜索字段:{ 
        "gte":最小值,
        "lte":最大值
       } 
     }
   }
}
gt/lt:大于/小于
gte/lte:大于等于/小于等于
eg:
GET /students/_search
{
  "query": {
    "range": {
      "id": {
        "gte": 1,
        "lte": 3
      }
    }
  }
}

4.短语检索

搜索条件不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

#格式
{
    "query":{
    "match_phrase":{
      搜索字段:搜索条件
     }
   }
}
eg:
GET /students/_search
{
  "query": {
    "match_phrase": {
      "info": "成绩"
    }
  }
}

5.词组查询term/terms

单词或者词组搜索,不做任何分词解析,在搜索字段对应的倒排索引中精确匹配

#格式
{
    "query":{
    "term":{ 
            搜索字段: 搜索条件
     }
   }
}
{
    "query":{
    "terms":{ 
            搜索字段: [搜索条件1,搜索条件2]
     }
   }
}

6.复合搜索

es也是可以像Java语言那样,可以将多个条件嵌套使用,从而筛选出符合条件的那一个。

#格式
GET /索引/_search
{ 
    "query": { 
    "bool": { 
      // 必须满足的条件 
      "must": [ 
                搜索方式:搜索参数,
                搜索方式:搜索参数
       ],
      // 多个条件有任意一个满足即可
      "should": [
                搜索方式:搜索参数,
               搜索方式:搜索参数
           ],
            // 必须不满足的条件
           "must_not":[
               搜索方式:搜索参数,
               搜索方式:搜索参数
           ]
       } 
   } 
}
eg:
GET /students/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "term": {
            "info": "成绩"
          }
        },
        {
          "range": {
            "id": {
              "gte": 1,
              "lte": 3
            }
          }
        }
      ]
    }
  }
}

上面就是查询出id在1到3范围内,且info里面含有成绩字样的student

7.结果排序

es默认使用相关度分数实现排序,也可以通过搜索语法定制化排序

#格式
GET /索引/_search
{ 
  "query": 搜索条件,
  "sort": [
       {
           "字段1":{
               "order":"asc"
           } 
       },
       { 
           "字段2":{ 
               "order":"desc" 
           } 
       }
   ] 
}
eg:
#1根据匹配度排序,高的在前面
GET /students/_search
{
  "query": {
    "match": {
      "info": "我喜欢成绩好的学生"
    }
  }
}
#2根据搜索语法定制化排序
GET /students/_search
{
  "query": {
    "match": {
      "info": "我喜欢淑仪"
    }
  },
  "sort": [
    {
      "id": {
        "order": "desc"
      }
    }
  ]
}

tips:es默认不会对text类型的字段做排序(因为会分词),如果需要使用text类型的字段做结果排序,可以使用keyword类型的字段作为排序依据(因为keyword类型的字段不会做分词处理)

8.分页查询

这个顾名思义就是当查询内容过多的时候,可以将其分成几页,每页限定规定的数量进行查询。

#格式
GET /索引/_search
{ 
    "query": 搜索条件,
    "from": 起始下标,
    "size": 查询记录数
}
eg:
GET /students/_search
{
  "query":{
        "match_all":{}
    },
    "from":0,
    "size":3
}

9.sql查询

在es里面使用sql语句对文档进行查询(没啥用)

#格式
GET /_sql?format=txt
{
    "query": SQL语句
}
eg:
GET /_sql?format=txt
{
  "query": "select *from students"
}

四、总结

介绍了一些elasticsearch的常见文档搜索方式,结合前几篇文章学习,可以很好地入门es,希望你有所收获。

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
27天前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
1月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 9.1.5 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.1.5 (macOS, Linux, Windows) - 分布式搜索和分析引擎
228 0
|
2月前
|
JSON 监控 Java
Elasticsearch 分布式搜索与分析引擎技术详解与实践指南
本文档全面介绍 Elasticsearch 分布式搜索与分析引擎的核心概念、架构设计和实践应用。作为基于 Lucene 的分布式搜索引擎,Elasticsearch 提供了近实时的搜索能力、强大的数据分析功能和可扩展的分布式架构。本文将深入探讨其索引机制、查询 DSL、集群管理、性能优化以及与各种应用场景的集成,帮助开发者构建高性能的搜索和分析系统。
233 0
|
存储 自然语言处理 BI
从 Elasticsearch 到 Apache Doris 腾讯音乐内容库升级,统一搜索分析引擎,成本直降 80%
实现写入性能提升 4 倍、使用成本节省达 80% 的显著成效
450 1
从 Elasticsearch 到 Apache Doris 腾讯音乐内容库升级,统一搜索分析引擎,成本直降 80%
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
805 6
|
7月前
|
人工智能 自然语言处理 运维
让搜索引擎“更懂你”:AI × Elasticsearch MCP Server 开源实战
本文介绍基于Model Context Protocol (MCP)标准的Elasticsearch MCP Server,它为AI助手(如Claude、Cursor等)提供与Elasticsearch数据源交互的能力。文章涵盖MCP概念、Elasticsearch MCP Server的功能特性及实际应用场景,例如数据探索、开发辅助。通过自然语言处理,用户无需掌握复杂查询语法即可操作Elasticsearch,显著降低使用门槛并提升效率。项目开源地址:<https://github.com/awesimon/elasticsearch-mcp>,欢迎体验与反馈。
1858 1
|
6月前
|
存储 安全 Linux
Elasticsearch Enterprise 9.0 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 9.0 (macOS, Linux, Windows) - 分布式搜索和分析引擎
288 0
|
6月前
|
存储 Linux iOS开发
Elasticsearch Enterprise 8.18 发布 - 分布式搜索和分析引擎
Elasticsearch Enterprise 8.18 (macOS, Linux, Windows) - 分布式搜索和分析引擎
235 0
|
11月前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
629 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
11月前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
544 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot