ElasticSearch的初步检索和进阶检索
ES支持两种基本方式检索:
一个是通过使用 REST request URI来发送搜索参数(uri + 检索参数)
GET bank/_search?q=*&sort=account_num:asc
另一个是通过 REST request body 来发送他们 (uri + 请求体)
GET bank/_search { "query":{ "match_all":{} }, "sort":[ { "balance":{ "order":"desc" } } ], "from":0, "size":5, "_source":["balance","firstname"] }
1、match_all :查询所有#
GET bank/_search { "query":{ "match_all"{} }, "sort":[ { "balance":{ "order":"desc" } } ], "from":0, "size":5, "_source":["balance","firstname"] }
2、match查询 #
全文检索会按照评分进行排序,会对检索条件进行分词匹配
GET bank/_search { "query": { "match": { "address": "kings" } } }
3、match_phrase 【短语匹配】#
将需要匹配的值,当成一个整体单词(不分词)进行检索
GET bank/_search { "query": { "match_phrase": { "address": "mill lane" } } }
4、multi_match 【多字段匹配】#
也是分词查询
// 查询 adress或者city中包含 mill的数据 GET bank/_search { "query": { "multi_match": { "query": "mill", "fields": ["address","city"] } } }
5、filter #
只用于对数据进行过滤,不会计算相关性得分
GET bank/_search { "query": { "bool": { "filter": { "range": { "age": { "gte": 10, "lte": 20 } } } } } }
6、term 查询#
和match一样。匹配某个属性的值。全文检索用match,其他非text字段匹配用term
GET /bank/_search { "query": { "term": { "balance": { "value": "32838" } } } }
7、aggregation (执行聚合)#
聚合提供了从数据中分组和提取数据的能力。最简单的聚合大致等于SQL的聚合函数。
在ElasticSearch中,你有执行搜索返回hit,并且同时返回聚合结果,把一个响应中所有hits分隔开的
能力,这是非常强大且有效的。您可以执行查询和多个聚合并且在一次使用中得到各自的返回结果,使用一次简介和简化的api来避免网络往返
语法:
"aggregations" : { "<aggregation_name>" : { //聚合名称 "<aggregation_type>" : { //聚合类型 <aggregation_body> //聚合体 } [,"meta" : { [<meta_data_body>] } ]? [,"aggregations" : { [<sub_aggregation>]+ } ]? }, "<aggregation_name_2>" : { ... }, "<aggregation_name_3>" : { ... } .... }
需求:
1)搜索address中包含mail的所有人的年龄和平均年龄,但不显示这些人的详情
GET bank/_search { "query": { "match": { "address": "mill" } }, "aggs": { "ageagg": { "terms": { "field": "age", "size": 10 } }, "ageavg":{ "avg": { "field": "age" } }, "balanceavg":{ "avg": { "field": "balance" } } } }
2)按照年龄聚合,并求这些年龄段的人的平均薪资
(聚合里面套聚合)
GET bank/_search { "query": { "match_all": {} }, "aggs": { "ageagg": { "terms": { "field": "age", "size": 10 }, "aggs": { "ageBalanceAvg": { "avg": { "field": "balance" } } } } } }
3)查出所有的年龄分布,并且这些年龄段中M的平均薪资和F的平均薪资,以及这个年龄段总体的平均薪资
GET bank/_search { "query": { "match_all": {} }, "aggs": { "agegg": { //聚合年龄 "terms": { "field": "age", "size": 100 }, "aggs": { "genderagg":{ //在年龄的聚合结果上聚合性别 "terms": { "field": "gender.keyword", "size": 2 }, "aggs": { "balanceagg": { //xx岁 M性别的平均薪资 "avg": { "field": "balance" } } } }, "agebalanceaavg":{ //xx岁的平均薪资 "avg": { "field": "balance" } } } } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2019-12-18 Zuul 网关
2019-12-18 Feign