首页 > 其他分享 >ES(ElasticSearch)基础查询语法

ES(ElasticSearch)基础查询语法

时间:2024-04-09 16:02:01浏览次数:23  
标签:name doc 查询 语法 ElasticSearch ES query jacky match

在ES中使用正确有意义的查询语句是很重要的,可以方便、快速的从大量数据中找到想要的数据。所以写好一个查询语句是必不可少的。

ES分词器

分词器是ES搜索引擎的核心特点,合理了解并使用可以发挥ES最大的效率。后面很多查询也有关,所以应该重点了解分词器。
对于存入(Index)中的各个字段(Term),ES内部都会有分词器对其分词,然后将这个分词结果保存,方便未来使用。也可以直接使用。
访问分词器使用_analyze,默认是英文分词器,中文可以下载其他分词器使用。

点击查看代码
POST http://ip:prot/_analyze
{
  "analyzer": "standard",
  "text": "This is a test doc"
}

结果会返回被分好词的单词,还有偏移量。

ES查询

1、match

下面是es中全量查询,查询所有数据,默认size为10,比较消耗细性能,建议少使用。

GET test/doc/_search
{
  "query":{
    "match_all": {
    }
  }
}

1.1 match_phrase 短语查询

对于获取想要的数据进行部分查询,使用下面例子中的语法。因为es中是使用分词器作为核心,所以返回结果中会有name中包含jacky的所有数据。而不是name==="jacky"的数据。

GET test1/doc/_search
{
  "query":{
    "match":{
      "name":"jacky"
    }
  }
}
查看结果示例
"hits" : [
{
  "_index" : "test",
  "_type" : "doc",
  "_id" : "1",
  "_score" : 0.68324494,
  "_source" : {
    "name" : "jacky"
  }
},
{
  "_index" : "test",
  "_type" : "doc",
  "_id" : "1",
  "_score" : 0.68324434,
  "_source" : {
    "name" : "jacky chen"
  }
},
  ......  ]

1.2 term 精确查询

但是如果想查询,正好name为jacky不多不少,该怎么查询呢?
使用term(精确匹配查询)可以获取想要的结果。

{
  "query": {
    "term": {
      "name.keyword": "jacky"
    }
  }
}

使用term精确查询,就可以返回精确匹配的值。

1.3 multi_match bool 多字段查询

多字段查询可以同时匹配多个字段,并且只返回目标的key-value。

{
  "name":"jacky",
  "age":16,
  "addr":"XX-XX",
  "job":"student",
   ......
}

例如某index中存贮的类似格式的大量数据,但是我们只需要其中name和age属性。如果使用之前的查询方式,addr和job以及其他的属性会一并返回。大大减少了数据处理效率,以及服务器查询压力。
这时,多字段查询的优势就体现出来了。

GET test/doc/_search
{
  "query": {
    "multi_match": {
      "query": "search",
      "fields": ["name","age"]
    }
  }
}

除了使用multi_match查询以外,还有bool查询

查看bool查询代码
GET test/doc/_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "name": "jacky" } },
        { "match": { "age": "16" } }
      ]
    }
  }
}

1.4排序查询

当查询一些类似字典或者数字类型的数据时候,希望查出来就已经是顺(逆)序,就会使用到排序查询
倒叙排序

GET test/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ]
}
升序排序
GET test/doc/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "age": {
        "order": "asc"
      }
    }
  ]
}

1.5结果过滤

当了解使用查询结果排序后,结果过滤也是很重要的。

PUT test/doc/_search
{
  "name":"jacky",
  "age":16,
  "from": "gu",
  "desc": "good good study,day day up",
  "tags": ["好好学习", "天天向上"]
}

如果只需要其中的name和age属性,使用结果过滤可以提高查询效率。

GET test3/doc/_search
{
  "query": {
    "match": {
      "name": "jacky"
    }
  },
  "_source": ["name","age"]
}

1.6 时间范围查询

先了解范围查询的符号

符号 含义
gte greater-than or equal to, 大于或等于
gt greater-than, 大于
lte less-than or equal to, 小于或等于
lt less-than, 小于
例子:查询网站中最近一天发布的博客:
GET website/_search
{
  "query": {
    "range": {
      "post_date": {
        "gte": "now-1d/d",
	// 当前时间的上一天, 四舍五入到最近的一天
        "lt": "now/d"
	// 当前时间, 四舍五入到最近的一天
      }
    }
  }
}
表达式 含义 表达式 含义
y M
w 星期 d
h 小时 H 小时
m 分钟 s

now表达式可以获取当前的时间
所以得到的数据就是在昨天到今天之间的数据。

标签:name,doc,查询,语法,ElasticSearch,ES,query,jacky,match
From: https://www.cnblogs.com/G-Sucker/p/18123921

相关文章

  • xmlhttprequest upload 实现前端上传进度
    elementuiupload代码片段exportdefaultfunctionupload(option){if(typeofXMLHttpRequest==='undefined'){return;}constxhr=newXMLHttpRequest();constaction=option.action;if(xhr.upload){xhr.upload.onprogress=......
  • ubuntu16.04 wordpress建站教程
    四、wordpress搭建完成本地浏览器输入服务器IP地址,跳转至wordpress安装界面在安装界面中输入数据库密码即可完成安装本地机器输入IP地址/wp-admin进入wordpress后台登录成功......
  • Postgres 数据库(一)基本命令
    一、主备数据一致性1、通过wal检测两个数据库实例数据是否一致(该sql语句需要在主库上执行)1.1pg_stat_replication可以进行流复制监控(pg_stat_replication视图显示WAL发送进程的详细信息)postgres=#SELECT*FROMpg_stat_replication;-[RECORD1]--—-----+-—--------......
  • C语言语法最后一个教案-教案21(预处理 · 头文件)
    最近给大家争取到一个深夜福利保证你在深夜手机刷到嘎嘎香~那就是 官方授权大流量卡缺点:月租太便宜 185GB~100分钟通话时长~长期套餐~畅想自由的气息流量自由的同时还拥有超长通话,而且免费领取。名额有限,咱们废话不多说直接上图。感兴趣的家人私我或者直接加微......
  • golang中结构体初始化的语法格式
    在Go语言中,结构体(struct)的初始化可以通过以下几种方式来进行:键值对初始化(字段名明确指定):当结构体字段很多或者你需要只初始化部分字段时,可以采用键值对的方式来初始化结构体。每个字段名后面跟一个冒号和它的值。typePersonstruct{NamestringAgeintC......
  • 基于canvas 或 svg绘制并生成base64 用于cesium billboard 渲染 替代label
    原因cesium的label样式不太好修改canvas生成functionlabelContent(showData){constmyConvas=document.createElement("canvas");constscale=1;//获取2d的上线文开始设置相关属性myConvas.width=150myConvas.height=65;letcont......
  • 13. TypeScript中的联合类型和交叉类型
    在TypeScript中,类型系统提供了多种方式来组合类型,其中最常见的就是联合类型和交叉类型。这两种类型都允许你以灵活的方式处理可能有多种类型的值。一、联合类型1.1定义在TypeScript中,联合类型是一种复合类型,表示一个值可以是几种类型之一。我们使用|符号来定义联合类型......
  • 14. TypeScript类型保护(类型缩小、类型守卫)
    类型保护是一种TypeScript技术,用于获取变量类型信息,通常使用在条件块语句中。类型守卫是返回布尔值的常规函数,接受一个类型并告诉TypeScript是否可以缩小到更具体的类型。TypeScript类型保护的方式类型断言类型断言是一种告诉编译器“相信我,我知道我在做什么”的方式。......
  • postgresql 截取第二个特定字符
    在开发PostgreSQL数据库应用程序时,经常需要在查询语句中截取字符串。在某些情况下,需要截取字符串中的特定字符。例如,从URL中获取域名,从文本中获取文件名等。本文将介绍如何在PostgreSQL中截取字符串中的第二个特定字符。我们将使用SUBSTRING和POSITION函数来实现这一目......
  • PostgreSQL 将分组后的字段合并成一个 JSON 对象
    在PostgreSQL数据库中,有时需要将分组后的字段合并成一个JSON对象,并将其保存到一个新的字段中。本文将介绍如何使用PostgreSQL中的json_agg函数来实现这一目标。假设我们有一个销售订单表格,其中包含订单编号、产品名称和销售数量等字段。现在我们需要按照订单编号分组,并将......