当前位置: 首页 > article >正文

Elasticsearch专栏-4.es基本用法-查询api

es基本用法-查询api
    • 说明
    • 查询所有
    • 某一字段匹配查询
    • 多字段查询
    • bool查询
    • 范围查询
    • 精确查询
    • 正则匹配
    • 模糊查询
    • 结果处理

说明

es对数据的检索,总结下来就是两部分,即查询和处理。查询指的是查找符合条件的数据,包括查询所有、匹配查询、布尔查询、范围查询、模糊查询等等。处理指的是对查询到的数据做进一步处理,包括是否分页、是否排序、是否聚合、是否分组、是否只返回部分字段等等。es的api就是对这两部分的不同组合。举例如下,数据集使用上一篇创建的bank索引。

查询所有

GET /bank/_search
{
  "query":{
    "match_all": {}
  }
}

在这里插入图片描述

某一字段匹配查询

这块的查询已经涉及到了分词,指的是查询address中包含Place或National的文档。针对分词查询后面会进一步做深入讲解。

GET /bank/_search
{
	"query": {
		"match": {
			"address": "Place National"
		}
	}
}

在这里插入图片描述

多字段查询

multi_match用在多字段查询中,下面的语句表示,只要address或city中,包含mill和urie其中的一个,就算是命中查询。用sql语句表示: select * from bank where (address like ‘%mill%’ or like ‘%urie%’) or (citylike ‘%mill%’ or like ‘%urie%’)

GET /bank/_search
{
  "query":{
    "multi_match": {
      "query": "mill urie",
      "fields": ["address","city"]
    }
  }
}

在这里插入图片描述

bool查询

bool查询主要用到三个关键字:must、must_not、should。在mysql中,就是and、not、or的概念。
其中,must表示必须包含,must_not表示一定不能包含,should表示可以包含,也可以不包含。包含的话,排名要比不包含的靠前。

GET /bank/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"gender": "M"
					}
				},
				{
					"match": {
						"address": "mill"
					}
				}
			],
			"must_not": [
				{
					"match": {
						"age": "18"
					}
				}
			],
			"should": [
				{
					"match": {
						"lastname": "Wallace"
					}
				}
			]
		}
	}
}

在这里插入图片描述

范围查询

在范围查询中,使用的关键词有range、filter,以及表示大于小于的gt、lt、gte、lte。

关键字含义
gt大于
lt小于
gte大于等于
lte小于等于
  1. rang方式
GET /bank/_search
{
	"query": {
	  "range": {
		"age": {
		  "gte": "20",
		  "lte": "25"
		  }
	  }
	}
}

在这里插入图片描述

  1. filter方式
GET /bank/_search
{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"gender": "M"
					}
				},
				{
					"match": {
						"address": "mill"
					}
				}
			],
			"filter": [
				{
					"range": {
						"age": {
							"gte": 10,
							"lte": 50
						}
					}
				},
				{
					"range": {
						"balance": {
							"gte": 9812,
							"lte": 9813
						}
					}
				}
			]
		}
	}
}

在这里插入图片描述

精确查询

精确查询可以简单理解为完全匹配查询,用term关键字。在数值型查询中经常用到,而在文本中查询使用,是表示查询时不进行分词,刚好和分词查询关键字match对立。

1.查询单个

GET /bank/_search
{
	"query": {
		"match": {
			"age": 33
		}
	}
}

在这里插入图片描述
2.查询多个,此时用terms

GET /bank/_search
{
	"query": {
		"terms": {
		  "balance": [
		    "34487",
		    "29104"
		  ]
		}
	}
}

在这里插入图片描述
2.查询多个,也可以用另外一种方式:should+term

GET /bank/_search
{
	"query": {
	  "bool": {
	    "should": [
	      {
	        "term": {
	          "balance": "34487"
	        }
	      },
	      {
	        "term": {
	          "balance": "29104"
	        }
	      }
	    ]
	  }
	}
}

在这里插入图片描述

正则匹配

GET /bank/_search
{
  "query": {
    "wildcard": {
        "firstname": "*amber"
    }
  }
}

在这里插入图片描述

模糊查询

GET /bank/_search
{
  "query": {
    "fuzzy": {
        "firstname": "hol"
    }
  }
}

在这里插入图片描述
上述只罗列了常用的查询,除此之外,还有很多其他查询,这里不做演示,感兴趣的小伙伴可以自己查找下。

结果处理

开头我们也说了,es对数据的处理就两部分,查询和处理。上面介绍了查询,现在我们介绍下基本的处理:分页、排序、返回部分字段。

关键字含义
sortdesc/asc
from页数,从0开始
size每页大小
_source只返回需要的字段,可以罗列字段,也可以用通配符
GET /bank/_search
{
	"query": {
		"match": {
			"address": "Hendrickson"
		}
	},
	"sort": [
		{
			"balance": "desc"
		}
	],
	"from": 0,
	"size": 5,
	"_source": [
		"balance",
		"account_number",
		"address"
	]
}

在这里插入图片描述

GET /bank/_search
{
	"query": {
		"match": {
			"address": "Hendrickson"
		}
	},
	"sort": [
		{
			"balance": "asc"
		}
	],
	"from": 0,
	"size": 5,
	"_source":{
     "includes": "addr*",
     "excludes": ["name","bir*"]
  }
}

在这里插入图片描述


http://www.kler.cn/a/393326.html

相关文章:

  • mac 关闭 sip
  • 事件驱动编程与异步编程:原理、对比及实践案例
  • 【自动化测试】windows下安装Selenium浏览器界面测试工具
  • 从 GitLab.com 到 JihuLab.com 的迁移指南
  • vue3入门教程:计算属性
  • Mybatis 小结
  • 【软件测试】白盒、黑盒、灰盒测试,按照测试阶段分类
  • Blender进阶:颜色节点
  • 使用 unicorn 和 capstone 库来模拟 ARM Thumb 指令的执行(一)
  • 多链路负载均衡设置在哪里?
  • 移动应用开发:实现简易调查问卷
  • 【go从零单排】File Paths文件路径
  • [ 网络安全介绍 5 ] 为什么要学习网络安全?
  • 自动化测试策略 —— 新功能还是老功能的回归测试?
  • 地面沉降数值模拟/三维地质建模数据处理技术应用
  • 机器学习5_支持向量机_原问题和对偶问题
  • 数字字符串格式化
  • 【Rust调用Windows API】杀掉指定进程(包括兄弟进程、子进程、父进程)
  • 人力资源招聘系统-提升招聘效率与质量的关键工具
  • Docker 部署Nacos 单机部署 MYSQL数据持久化
  • 计算机网络(4)之交换技术,分层技术和默认网关
  • 怎么在MindMaster里插入剪贴画?
  • c++ 二分查找
  • Mac Nginx 前端打包部署
  • Vue开发风格
  • Scala的Map集合练习