热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

elasticsearch从入门到入门系列(三)搜索大汇总

1.term的多种查询介绍:单词级别的查询这些查询通常用于结构化的查询,比如:number,date,keyword等,而

1.term的多种查询

  • 介绍:
    • 单词级别的查询
    • 这些查询通常用于结构化的查询,比如:number,date,keyword等,而不是text
    • 也就是说,全⽂本查询之前要先对⽂本内容进⾏分词,⽽单词级别的查询直接在相应字段的
      反向索引中精确查找,单词级别的查询⼀般⽤于数值、⽇期等类型的字段上
  • Term Query精确匹配查询(查找号码为23的球员)

请求:POST nba/_search{"query": {"term": {"jerseyNo": "23"}}}

  • Exsit Query 在特定的字段中查找⾮空值的⽂档(查找队名⾮空的球员)

请求:POST nba/_search{"query": {"exists": {"field": "teamNameEn"}}}

  • Prefix Query 查找包含带有指定前缀term的⽂档(查找队名以Rock开头的球员)

请求:POST nba/_search{"query":{"prefix":{"teamNameEn" : "Rock"}}}

  • Wildcard Query ⽀持通配符查询,*表示任意字符,?表示任意单个字符(查找⽕箭队的球员)

POST nba/_search{"query": {"wildcard": {"teamNameEn": "Ro*s"}}
}

  • Regexp Query 正则表达式查询(查找⽕箭队的球员)

POST nba/_search{"query": {"regexp": {"teamNameEn": "Ro.*s"}}
}

  • Ids Query(查找id为1和2的球员)

POST nba/_search{"query": {"ids": {"values": [1, 2]}}
}

2.es的范围搜索

  • 查找指定字段在指定范围内包含值(⽇期、数字或字符串)的⽂档。
    • 查找在nba打了2年到10年以内的球员

POST nba/_search{"query": {"range": {"playYear": {"gte": 2, "lte": 10}}}
}

3.es的布尔查询

  • 布尔查询

typedescription
must必须出现在匹配⽂档中
filter必须出现在⽂档中,但是不打分
must_not不能出现在⽂档中
should应该出现在⽂档中

  • must(查找名字叫做james的球员)

POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}]}}
}

  • 效果同must,但是不打分(查找名字叫做James的球员)

POST /nba/_search{"query": {"bool": {"filter": [{"match": {"displayNameEn": "james"}}]}}
}

  • must_not (查找名字叫做James的⻄部球员)

POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}]}}
}

  • should(查找名字叫做James的打球时间应该在11到20年⻄部球员)
    • 即使匹配不到也返回,只是评分不同

POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}], "should": [{"range": {"playYear": {"gte": 11, "lte": 20}}}]}}
}

  • 如果minimum_should_match=1,则变成要查出名字叫做James的打球时间在11到20年⻄部 球员

POST /nba/_search{"query": {"bool": {"must": [{"match": {"displayNameEn": "james"}}], "must_not": [{"term": {"teamConferenceEn": {"value": "Eastern"}}}], "should": [{"range": {"playYear": {"gte": 11, "lte": 20}}}], "minimum_should_match": 1}}
}

4.es的排序查询

  • ⽕箭队中按打球时间从⼤到⼩排序的球员

POST nba/_search{"query": {"match": {"teamNameEn": "Rockets"}}, "sort": [{"playYear": {"order": "desc"}}]
}

  • ⽕箭队中按打球时间从⼤到⼩,如果年龄相同则按照身⾼从⾼到低排序的球员

POST nba/_search{"query": {"match": {"teamNameEn": "Rockets"}}, "sort": [{"playYear": {"order": "desc"}}, {"heightValue": {"order": "asc"}}]
}

5.es聚合查询之指标聚合

  • ES聚合分析是什么
    • 聚合分析是数据库中重要的功能特性,完成对⼀个查询的数据集中数据的聚合计算,如:找 出某字段(或计算表达式的结果)的最⼤值、最⼩值,计算和、平均值等。ES作为搜索引擎 兼数据库,同样提供了强⼤的聚合分析能⼒。
    • 对⼀个数据集求最⼤、最⼩、和、平均值等指标的聚合,在ES中称为指标聚合
    • ⽽关系型数据库中除了有聚合函数外,还可以对查询出的数据进⾏分组group by,再在组上 进⾏指标聚合。在ES中称为桶聚合
  • max min sum avg
    • 求出火箭队球员的平均年龄

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}, "size": 0
}

  • value_count 统计⾮空字段的⽂档数
    • 求出⽕箭队中球员打球时间不为空的数量

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"countPlayerYear": {"value_count": {"field": "playYear"}}}, "size": 0
}

  • 查出⽕箭队有多少名球员

POST nba/_count{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}
}

  • Cardinality 值去重计数
    • 查出⽕箭队中年龄不同的数量

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"counAget": {"cardinality": {"field": "age"}}}, "size": 0
}

  • stats 统计count max min avg sum 5个值
    • 查出⽕箭队球员的年龄stats

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"statsAge": {"stats": {"field": "age"}}}, "size": 0
}

  • Extended stats ⽐stats多4个统计结果: 平⽅和、⽅差、标准差、平均值加/减两个标准差的区间
    • 查出⽕箭队球员的年龄Extend stats

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"extendStatsAge": {"extended_stats": {"field": "age"}}}, "size": 0
}

  • Percentiles 占⽐百分位对应的值统计,默认返回[ 1, 5, 25, 50, 75, 95, 99 ]分位上的值
    • 查出⽕箭的球员的年龄占⽐

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"pecentAge": {"percentiles": {"field": "age"}}}, "size": 0
}

  • 查出⽕箭的球员的年龄占⽐(指定分位值)

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"percentAge": {"percentiles": {"field": "age", "percents": [20, 50, 75]}}}, "size": 0
}

6.es聚合查询之桶聚合

  • Terms Aggregation 根据字段项分组聚合
    • ⽕箭队根据年龄进⾏分组

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10}}}, "size": 0
}

  • order 分组聚合排序
    • ⽕箭队根据年龄进⾏分组,分组信息通过年龄从⼤到⼩排序 (通过指定字段)

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10, "order": {"_key": "desc"}}}}, "size": 0
}

  • ⽕箭队根据年龄进⾏分组,分组信息通过⽂档数从⼤到⼩排序 (通过⽂档数)

POST /nba/_search{"query": {"term": {"teamNameEn": {"value": "Rockets"}}}, "aggs": {"aggsAge": {"terms": {"field": "age", "size": 10, "order": {"_count": "desc"}}}}, "size": 0
}

  • 每⽀球队按该队所有球员的平均年龄进⾏分组排序 (通过分组指标值)

POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}

  • 筛选分组聚合
    • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (指定值列表)

POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "include": ["Lakers", "Rockets", "Warriors"], "exclude": ["Warriors"], "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}

  • 湖⼈和⽕箭队按球队平均年龄进⾏分组排序 (正则表达式匹配值)

POST /nba/_search{"aggs": {"aggsTeamName": {"terms": {"field": "teamNameEn", "include": "Lakers|Ro.*|Warriors.*", "exclude": "Warriors", "size": 30, "order": {"avgAge": "desc"}}, "aggs": {"avgAge": {"avg": {"field": "age"}}}}}, "size": 0
}

  • Range Aggregation 范围分组聚合
    • NBA球员年龄按20,20-35,35这样分组

POST /nba/_search{"aggs": {"ageRange": {"range": {"field": "age", "ranges": [{"to": 20}, {"from": 20, "to": 35}, {"from": 35}]}}}, "size": 0
}

  • NBA球员年龄按20,20-35,35这样分组 (起别名)

POST /nba/_search{"aggs": {"ageRange": {"range": {"field": "age", "ranges": [{"to": 20, "key": "A"}, {"from": 20, "to": 35, "key": "B"}, {"from": 35, "key": "C"}]}}}, "size": 0
}

  • Date Range Aggregation 时间范围分组聚合
    • NBA球员按出⽣年⽉分组

POST /nba/_search{"aggs": {"birthDayRange": {"date_range": {"field": "birthDay", "format": "MM-yyy", "ranges": [{"to": "01-1989"}, {"from": "01-1989", "to": "01-1999"}, {"from": "01-1999", "to": "01-2009"}, {"from": "01-2009"}]}}}, "size": 0
}

  • Date Histogram Aggregation 时间柱状图聚合
    • 按天、⽉、年等进⾏聚合统计。可按 year (1y), quarter (1q), month (1M), week (1w), day (1d), hour (1h), minute (1m), second (1s) 间隔聚合
    • NBA球员按出⽣年分组

POST /nba/_search{"aggs": {"birthday_aggs": {"date_histogram": {"field": "birthDay", "format": "yyyy", "interval": "year"}}}, "size": 0
}

7.es之query_string查询

  • 介绍:query_string 查询,如果熟悉lucene的查询语法,我们可以直接⽤lucene查询语法写⼀个查 询串进⾏查询,ES中接到请求后,通过查询解析器,解析查询串⽣成对应的查询。
  • 指定单个字段查询

POST /nba/_search{"query": {"query_string": {"default_field": "displayNameEn", "query": "james OR curry"}}, "size": 100
}

  • 指定多个字段查询

POST /nba/_search{"query": {"query_string": {"fields": ["displayNameEn", "teamNameEn"], "query": "James AND Rockets"}}, "size": 100
}

 


推荐阅读
  • 2.ElasticSearch练习索引 : sms-logs-index类型:sms-logs-type   数据导入部分PUTsms_logs_indexsms_logs_typ ... [详细]
  • Excel数据处理中的七个查询匹配函数详解
    本文介绍了Excel数据处理中的七个查询匹配函数,以vlookup函数为例进行了详细讲解。通过示例和语法解释,说明了vlookup函数的用法和参数的含义,帮助读者更好地理解和运用查询匹配函数进行数据处理。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • python中使用正则表达式的步骤:1.导入re模块:importre2.初始化一个Regex对象:re.compile()3.刚刚创建的 ... [详细]
  • 这期内容当中小编将会给大家带来有关如何在php表单中使用正则表达式,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可 ... [详细]
  • 本文讨论了一个关于正则的困惑,即为什么一个函数会获取parent下所有的节点。同时提出了问题是否是正则表达式写错了。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文详细介绍了Python中正则表达式和re模块的使用方法。首先解释了转义符的作用,以及如何在字符串中包含特殊字符。然后介绍了re模块的功能和常用方法。通过学习本文,读者可以掌握正则表达式的基本概念和使用技巧,进一步提高Python编程能力。 ... [详细]
  • 本文介绍了在Java中检查字符串是否仅包含数字的方法,包括使用正则表达式的示例代码,并提供了测试案例进行验证。同时还解释了Java中的字符转义序列的使用。 ... [详细]
  • Ihaveaworkfolderdirectory.我有一个工作文件夹目录。holderDir.glob(*)>holder[ProjectOne, ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • 一、正则表达式1、match()方法调用match()方法可在字符串内检索指定的值,这个校验方法有点类似于数组字符串的和`lastIndexOf()match()`返回两种结果:1 ... [详细]
  • 前端开发中的重要一环:使用原生JavaScript封装jQuery库
    2019独角兽企业重金招聘Python工程师标准用原生js封装jquery的实现base.js***上官清偌*前台调用var$function(_this){return ... [详细]
author-avatar
mobiledu2502853623
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有