Elasticsearch连续剧之实战搜索文档

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 前几篇文章中,小编给大家介绍了一些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,希望你有所收获。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3月前
|
存储 自然语言处理 BI
|
15天前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案
128 3
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
|
1天前
|
人工智能 自然语言处理 搜索推荐
云端问道12期实操教学-构建基于Elasticsearch的企业级AI搜索应用
本文介绍了构建基于Elasticsearch的企业级AI搜索应用,涵盖了从传统关键词匹配到对话式问答的搜索形态演变。阿里云的AI搜索产品依托自研和开源(如Elasticsearch)引擎,提供高性能检索服务,支持千亿级数据毫秒响应。文章重点描述了AI搜索的三个核心关键点:精准结果、语义理解、高性能引擎,并展示了架构升级和典型应用场景,包括智能问答、电商导购、多模态图书及商品搜索等。通过实验部分,详细演示了如何使用阿里云ES搭建AI语义搜索Demo,涵盖模型创建、Pipeline配置、数据写入与检索测试等步骤,同时介绍了相关的计费模式。
|
1天前
|
人工智能 算法 API
构建基于 Elasticsearch 的企业级 AI 搜索应用
本文介绍了基于Elasticsearch构建企业级AI搜索应用的方案,重点讲解了RAG(检索增强生成)架构的实现。通过阿里云上的Elasticsearch AI搜索平台,简化了知识库文档抽取、文本切片等复杂流程,并结合稠密和稀疏向量的混合搜索技术,提升了召回和排序的准确性。此外,还探讨了Elastic的向量数据库优化措施及推理API的应用,展示了如何在云端高效实现精准的搜索与推理服务。未来将拓展至多模态数据和知识图谱,进一步提升RAG效果。
|
27天前
|
机器学习/深度学习 人工智能 运维
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
阿里云技术公开课预告:Elastic和阿里云搜索技术专家将深入解读阿里云Elasticsearch Enterprise版的AI功能及其在实际应用。
135 2
阿里云技术公开课直播预告:基于阿里云 Elasticsearch 构建 AI 搜索和可观测 Chatbot
|
12天前
|
数据采集 人工智能 运维
从企业级 RAG 到 AI Assistant,阿里云Elasticsearch AI 搜索技术实践
本文介绍了阿里云 Elasticsearch 推出的创新型 AI 搜索方案。
|
30天前
|
存储 人工智能 API
(Elasticsearch)使用阿里云 infererence API 及 semantic text 进行向量搜索
本文展示了如何使用阿里云 infererence API 及 semantic text 进行向量搜索。
|
26天前
|
搜索推荐 API 定位技术
一文看懂Elasticsearch的技术架构:高效、精准的搜索神器
Elasticsearch 是一个基于 Lucene 的开源搜索引擎,以其强大的全文本搜索功能和快速的倒排索引技术著称。它不仅支持数字、文本、地理位置等多类型数据,还提供了可调相关度分数、高级查询 DSL 等功能。Elasticsearch 的核心技术流程包括数据导入、解析、索引化、查询处理、得分计算及结果返回,确保高效处理大规模数据并提供准确的搜索结果。通过 RESTful API、Logstash 和 Filebeat 等工具,Elasticsearch 可以从多种数据源中导入和解析数据,支持复杂的查询需求。
97 0
|
2月前
|
存储 缓存 固态存储
Elasticsearch高性能搜索
【11月更文挑战第1天】
58 6
|
2月前
|
API 索引
Elasticsearch实时搜索
【11月更文挑战第2天】
57 1

热门文章

最新文章