03_ES数据查询操作

简介: 03_ES数据查询操作

1、数据准备

post /lib3/user
{
  "name":"lisi",
  "address":"shandong",
  "age":18,
  "interests":"youyong shufa changge tiaowu",
  "birthday":"2001-01-19"
}
post /lib3/user
{
  "name":"wangwu",
  "address":"zhejiang",
  "age":22,
  "interests":"youyong shufa",
  "birthday":"1997-01-19"
}
post /lib3/user
{
  "name":"zhangsan",
  "address":"zhejiang",
  "age":20,
  "interests":"youyong shufa changge changpao",
  "birthday":"1999-08-29"
}
post /lib3/user
{
  "name":"youyong",
  "address":"zhejiang",
  "age":20,
  "interests":"youyong shufa changge changpao",
  "birthday":"1999-08-29"
}

测试一下

get /lib3/user/_search?q=name:lisi
get /lib3/user/_search?q=name:wangwu&sort=age:desc

2、term查询和terms查询

精准查询term

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

term query会去倒排索引中寻找确切的term,它并不知道分词器的存在。这种查询适合keyword 、numeric、date。

term:查询某个字段里含有某个关键词的文档

terms:查询某个字段里含有多个关键词的文档

a、term 和 terms 是 包含(contains) 操作,而非 等值(equals) (判断)

b、不知道分词器的存在,所以不会去分词,

c、所谓的包含是文档分词结果某个分词是否相等,即文档是否包含这个分词

d、因为是在分词结果中匹配,所以大写要转换为小写,大写字母是匹配不到

get /lib3/user/_search/
{
  "query":{"term":{ "interests":"youyong"}}
}
get lib3/user/_search/
{
  "query":{"terms":{"interests":["shufa","youyong"]}}
}

3、控制查询返回的数量

get lib3/user/_search
{
  "from":0,
  "size":2,
  "query":{
    "terms":{
      "interests": ["changge","tiaowu"]
    }
  }
}

4、返回版本号

get lib3/user/_search
{
  "version":true,
  "query":{
    "term":{"interests": "changge"}
  }
}

5、match查询

match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程,match查询相当于模糊匹配,只包含其中一部分关键词就行
同时还要注意match系列匹配时,datatype要设置为text,否则不会开启分词

match query知道分词器的存在,会对filed进行分词操作,然后再查询
match_all:查询所有文档
multi_match:可以指定多个字段
match_phrase:短语匹配查询,ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变

GET lib3/user/_search
{
  "query":{"match":{"age": 20}}
}
GET lib3/user/_search
{
  "query":{"match":{"interests": "changge"}}
}
GET lib3/user/_search
{
  "query":{
    "match_all": {}
  }
}
GET lib3/user/_search
{
  "query":{
    "multi_match": {
      "query": "youyong",
      "fields":["interests","name"]
    }
  }
}
get lib3/user/_search
{
  "query":{
    "match_phrase":{"interests": "youyong shufa"}
  }
}

6、指定返回的字段

get lib3/user/_search
{
  "_source":["name","age"],
  "query":{
    "match": {
      "interests": "changge"
    }
  }
}

7、显示要的字段、去除不需要的字段、可以使用通配符*

get lib3/user/_search
{
  "query":{
    "match_all": {}
  },
  "_source":{
     "includes": "addr*",
     "excludes": ["name","bir*"]
  }
}

8、排序

前缀匹配查询"match_phrase_prefix", 并使用sort实现排序:desc:降序,asc升序

GET /lib3/user/_search
{
    "query": {
        "match_phrase_prefix": {
          "interests": "you"
        }
    },
    "sort":[
      {
        "age":{"order": "desc"}
      }
    ]
}


9、 范围查询

range:实现范围查询

参数:from,to,include_lower,include_upper,boost

include_lower:是否包含范围的左边界,默认是true

include_upper:是否包含范围的右边界,默认是true

GET /lib3/user/_search
{
    "query": {
        "range": {
            "birthday": {
                "from": "1990-10-10",
                "to": "2000-05-01",
                 "include_lower": true,
                "include_upper": false
            }
        }
    }
}
GET /lib3/user/_search
{
    "query": {
        "range": {
            "age": {
                "from": 18,
                "to": 25,
                "include_lower": true,
                "include_upper": false
            }
        }
    }
}

10、wildcard查询

允许使用通配符* 和 ?来进行查询
*代表0个或多个字符
?代表任意一个字符

GET /lib3/user/_search
{
    "query": {
        "wildcard": {
             "name": "wang*"
        }
    }
}
GET /lib3/user/_search
{
    "query": {
        "wildcard": {
             "name": "li?i"
        }
    }
}

11、fuzzy实现模糊查询

fuzzy 查询是 term 查询的模糊等价。

a、是 包含(contains) 操作,而非 等值(equals) (判断)。

b、不知道分词器的存在,所以不会去分词,

c、所谓的包含是文档分词结果某个分词是否包含,不是整个文档是否包含

d、因为是在分词结果中匹配,所以大写要转换为小写,大写字母是匹配不到

value:查询的关键字
boost:查询的权值,默认值是1.0
min_similarity:设置匹配的最小相似度,默认值为0.5,对于字符串,取值为0-1(包括0和1);对于数值,取值可能大于1;对于日期型取值为1d,1m等,1d就代表1天
prefix_length:指明区分词项的共同前缀长度,默认是0
max_expansions:查询中的词项可以扩展的数目,默认可以无限大

GET /lib3/user/_search
{
    "query": {
        "fuzzy": {
             "interests": "chagge"
        }
    }
}
GET /lib3/user/_search
{
    "query": {
        "fuzzy": {
             "interests": {
                 "value": "chagge"
             }
        }
    }
}

12、高亮搜索结果

GET /lib3/user/_search
{
    "query":{
        "match":{
            "interests": "changge"
        }
    },
    "highlight": {
        "fields": {
             "interests": {}
        }
    }
}
目录
相关文章
|
JavaScript 前端开发 小程序
js将数组中相同的元素进行分组 必看
js将数组中相同的元素进行分组 必看
343 1
|
Dubbo 大数据 应用服务中间件
【解决方法】Dubbo报错Data length too large
Data长度超过设置参数的最大值
|
5月前
|
存储 NoSQL Java
阿里云表格存储Tablestore对接使用完全指南
本文系统讲解阿里云表格存储Tablestore(原名OTS)的对接与使用方法。首先介绍Tablestore的产品定位、核心优势与三种数据模型(宽表、时序、消息),帮助读者建立正确的技术认知。随后详细说明从开通服务、创建实例到获取访问凭证的完整准备工作,并给出Java、Python、Node.js、Go四种主流语言的SDK安装与客户端初始化代码。在核心操作部分,深入讲解数据表的创建与管理、单行与批量读写、条件更新与删除等基础数据操作,附带完整可运行的代码示例。高级功能方面,重点介绍多元索引的创建与使用、通道服务实现数据实时消费、时序模型处理物联网数据,以及全局二级索引与局部事务等特性。最后阐述T
383 0
|
3月前
|
Java Apache 项目管理
【2026最新】Maven下载安装配置图文|Maven配置环境变量一篇搞定
Apache Maven 是 Apache 基金会开发的开源项目管理与构建工具,专为 Java 生态设计。它通过 `pom.xml` 统一管理依赖、编译、测试、打包及部署,支持 JDK 8+,最新稳定版为 3.9.16。
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
1442 161
|
10月前
|
算法 搜索推荐 Serverless
为什么 ES 的搜索结果只到 10,000?强制“数清楚”的代价有多大
Elasticsearch 7.x后默认返回10,000总数,实为Block-Max WAND算法的性能优化——跳过低分文档块以提升查询速度。强行开启`track_total_hits:true`将禁用该优化,导致CPU飙升、延迟激增。本文深入Lucene底层,解析其原理、陷阱与治理方案。
969 1
|
8月前
|
人工智能 自然语言处理 Linux
保姆级零门槛教程!OpenClaw(Clawdbot)阿里云/本地部署接入大模型智谱GLM-5指南
OpenClaw(曾用名Clawdbot、Moltbot)作为开源AI智能体工具,核心优势在于可将自然语言指令转化为实际系统操作,涵盖文件管理、终端命令执行、浏览器自动化、多工具集成等功能,摆脱了普通聊天机器人“只说不做”的局限。2026年,智谱GLM-5大模型正式发布,作为GLM系列的第五代核心产品,其凭借千亿级参数、多模态能力、200k超长上下文以及推理提速40%的优势,与OpenClaw协同后,可大幅强化自然语言理解、复杂任务规划与多模态交互能力,让新手也能快速实现办公自动化、开发辅助、多模态处理等场景落地。
4463 5
|
8月前
|
Web App开发 人工智能 Linux
阿里云/本地部署OpenClaw 接入Chrome Relay 完整指南:AI全自动操控浏览器实战教程
在AI自动化场景中,让AI直接接管浏览器操作、完成点击、输入、滚动、表单填写、页面抓取、自动登录等真实交互,是提升效率的关键能力。OpenClaw推出的**Chrome Relay**扩展与中继服务,可实现AI与Chrome浏览器的无缝打通,让OpenClaw通过自然语言直接操控浏览器,无需手动干预。本文基于2026年最新环境,完整提供**Chrome Relay全平台安装、权限配置、扩展加载、中继连接**的详细步骤,同时补充**阿里云服务器、本地MacOS/Linux/Windows11部署OpenClaw**、**阿里云百炼通义千问API配置**、**免费大模型Coding Plan对接
3421 0
|
10月前
|
人工智能 Java Go
2026年免费AI编程助手测评:通义灵码领衔,谁是国产开发者的最佳Copilot?
随着 Qwen 2.5-Coder 等开源模型的爆发,2026年 AI 编程工具已进入“百模大战”的深水区。本文基于代码生成准确率、中文语境理解能力及免费额度三大维度,对市场主流工具进行实测

热门文章

最新文章