ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

这篇具有很好参考价值的文章主要介绍了ElasticSearch中结构化查询(term、terms、range、exists、match、bool)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

term查询

        term 主要用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串(未经分析的文本数据类型):

{ "term": { "age": 26 }} 
{ "term": { "date": "2014-09-01" }} 
{ "term": { "public": true }} 
{ "term": { "tag": "full_text" }}

当前数据库中的数据:

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

POST /study/_search

# 请求数据
{
    "query": {
        "term": {
            "age": 20
        }
    }
}

# 响应数据
{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

terms查询

        terms 跟 term 相似,但 terms 允许指定多个匹配条件。 如果某个字段指定了多个值,那么文档需要一起去做匹配:

{
	"terms": {
		"tag": ["search", "full_text", "nosql"]
	}
}
POST /study/_search

# 请求数据
{
    "query": {
        "terms": {
            "age": [20, 21, 22]
        }
    }
}

# 响应数据
{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SXjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "李四",
                    "age": 21,
                    "mail": "222@qq.com",
                    "hobby": "羽毛球、乒乓球、足球、篮球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SnjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "王五",
                    "age": 22,
                    "mail": "333@qq.com",
                    "hobby": "羽毛球、篮球、游泳、听音乐"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

range查询

        range 过滤允许按照指定范围查找一批数据

范围操作符包含:

  • gt :大于
  • gte : 大于等于
  • lt : 小于
  • lte : 小于等于
POST /study/_search

# 请求数据
{
    "query": {
        "range": {
            "age": {
                "gte": 20,
                "lte": 22
            }
        }
    }
}

# 响应数据
{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 3,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SXjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "李四",
                    "age": 21,
                    "mail": "222@qq.com",
                    "hobby": "羽毛球、乒乓球、足球、篮球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SnjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "王五",
                    "age": 22,
                    "mail": "333@qq.com",
                    "hobby": "羽毛球、篮球、游泳、听音乐"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

exists查询

        exists 查询可以用于查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的 IS_NULL 条件

注意:这个查询只是针对已经查出一批数据来,但是想区分出某个字段是否存在的时候使用。

POST /study/_search

# 请求数据
{
    "query": {
        "exists": {
            "field": "age"
        }
    }
}

# 响应数据
{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 5,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SXjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "李四",
                    "age": 21,
                    "mail": "222@qq.com",
                    "hobby": "羽毛球、乒乓球、足球、篮球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "S3jOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "赵六",
                    "age": 23,
                    "mail": "444@qq.com",
                    "hobby": "跑步、游泳"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SnjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "王五",
                    "age": 22,
                    "mail": "333@qq.com",
                    "hobby": "羽毛球、篮球、游泳、听音乐"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "THjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "孙七",
                    "age": 24,
                    "mail": "555@qq.com",
                    "hobby": "听音乐、看电影"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

match 查询

        match 查询是一个标准查询,不管需要全文本查询还是精确查询基本上都要用到它。
        如果使用 match 查询一个全文本字段,它会在真正查询之前用分析器先分析 match 一下查询字符。

        如果用 match 指定了一个确切值,在遇到数字,日期,布尔值或者 not_analyzed 的字符串时,它将为搜索给定的值。

{ "match": { "age": 26 }} 
{ "match": { "date": "2014-09-01" }} 
{ "match": { "public": true }} 
{ "match": { "tag": "full_text" }}
POST  /study/_search
# 请求数据
{
    "query": {
        "match": {
            "age": "20"
        }
    }
}

# 响应数据
{
    "took": 18,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.0,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

数据库中数据:

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

bool查询

bool 查询可以用来合并多个条件查询结果的布尔逻辑,它包含以下操作符:

  • must : 多个查询条件的完全匹配,相当于 and 。
  • must_not :多个查询条件的相反匹配,相当于 not 。
  • should : 至少有一个查询条件匹配, 相当于 or 。

这些参数可以分别继承一个查询条件或者一个查询条件的数组:

{
	"bool": {
		"must": {
			"term": {
				"age": "20"
			}
		},
		"must_not": {
			"term": {
				"sex": "男"
			}
		},
		"should": [{
			"term": {
				"age": 25
			}
		}, {
			"term": {
				"age": 26
			}
		}]
	}
}
POST  /study/_search
# 请求数据
{
    "query": {
        "bool": {
            "must": {
                "match": {
                    "hobby": "足球"
                }
            },
            "must_not": {
                "match": {
                    "hobby": "音乐"
                }
            }
        }
    }
}

# 响应数据
{
    "took": 20,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 2,
            "relation": "eq"
        },
        "max_score": 1.7194062,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.7194062,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SXjOVIIBpyNh4YQ4CVSN",
                "_score": 1.6817665,
                "_source": {
                    "name": "李四",
                    "age": 21,
                    "mail": "222@qq.com",
                    "hobby": "羽毛球、乒乓球、足球、篮球"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)

POST  /study/_search

# 请求数据
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "hobby": "足球"
                    }
                },
                {
                    "match": {
                        "age": 23
                    }
                }
            ]
        }
    }
}

# 响应数据
{
    "took": 3,
    "timed_out": false,
    "_shards": {
        "total": 2,
        "successful": 2,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 4,
            "relation": "eq"
        },
        "max_score": 1.7194062,
        "hits": [
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SHjOVIIBpyNh4YQ4CVSN",
                "_score": 1.7194062,
                "_source": {
                    "name": "张三",
                    "age": 20,
                    "mail": "111@qq.com",
                    "hobby": "羽毛球、乒乓球、足球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SXjOVIIBpyNh4YQ4CVSN",
                "_score": 1.6817665,
                "_source": {
                    "name": "李四",
                    "age": 21,
                    "mail": "222@qq.com",
                    "hobby": "羽毛球、乒乓球、足球、篮球"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "S3jOVIIBpyNh4YQ4CVSN",
                "_score": 1.0,
                "_source": {
                    "name": "赵六",
                    "age": 23,
                    "mail": "444@qq.com",
                    "hobby": "跑步、游泳"
                }
            },
            {
                "_index": "study",
                "_type": "_doc",
                "_id": "SnjOVIIBpyNh4YQ4CVSN",
                "_score": 0.6038003,
                "_source": {
                    "name": "王五",
                    "age": 22,
                    "mail": "333@qq.com",
                    "hobby": "羽毛球、篮球、游泳、听音乐"
                }
            }
        ]
    }
}

ElasticSearch中结构化查询(term、terms、range、exists、match、bool)文章来源地址https://www.toymoban.com/news/detail-451207.html

到了这里,关于ElasticSearch中结构化查询(term、terms、range、exists、match、bool)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ElasticSearch核心详解、文档、查询响应、分页、映射、结构化查询

    在Elasticsearch中,文档以JSON格式进行存储,可以是复杂的结构,如: 其中,card是一个复杂对象,嵌套的Card对象 元数据(metadata)        一个文档不只有数据。它还包含了元数据(metadata)——关于文档的信息。 三个必须的元数据节点是: index        索引(index)类似于关

    2024年02月12日
    浏览(34)
  • Elasticsearch 中的 term、terms 和 match 查询

    目录 term 查询 terms 查询 match 查询 注意事项 结论    Elasticsearch 提供了多种查询类型,用于不同的搜索需求。 term 、 terms 和 match 是其中最常用的一些查询类型。下面分别介绍每种查询类型的用法和特点。   term 查询用于精确值匹配。它通常用于(keyword)类型的字段,

    2024年04月14日
    浏览(52)
  • elasticsearch term & match 查询

    运行结果: 查询结果: match_all 的值为空,表示没有查询条件,那就是查询全部。就像 select * from table_name 一样。 查询结果: match 查询时散列映射,包含了我们希望搜索的字段和字符串,即只要文档中有我们希望的那个,但也会带来一些问题。 es 会将文档中的内容进

    2023年04月19日
    浏览(56)
  • SQL:结构化查询语言

    创建一张表并插入数据: 以下常用函数以MySQL为例,其它数据库类似

    2024年02月06日
    浏览(50)
  • Elasticsearch(十)搜索---搜索匹配功能①--查询所有文档和term级别查询

    之前的学习我们已经了解了搜索的辅助功能,从这一章开始就是ES真正核心的功能,搜索。针对不同的数据类型,ES提供了很多搜索匹配功能:既有进行完全匹配的term搜索,也有按照范围匹配的range搜索;既有进行分词匹配的match搜索,也有按照前缀匹配的suggesr搜索。我们同样

    2024年02月11日
    浏览(58)
  • ElasticSearch系列 - SpringBoot整合ES:多个精确值查询 terms

    ElasticSearch - SpringBoot整合ES:多个精确值查询 terms 01. ElasticSearch terms 查询支持的数据类型 在Elasticsearch中,terms查询支持多种数据类型,包括: 字符串类型:可以将多个字符串值作为数组传递给terms查询,以匹配包含任何一个指定字符串值的文档。 数值类型:可以将多个数值作

    2024年02月16日
    浏览(71)
  • MySql003——SQL(结构化查询语言)基础知识

    DB:数据库(Database) 即存储数据的“仓库”,其本质是一个 文件系统 。它保存了一系列有组织的数据。 DBMS:数据库管理系统(Database Management System) 是一种操纵和管理数据库的 大型软件 (例如我们前面下载的MySQL软件),用于建立、使用和维护数据库,对数据库进行统一

    2024年02月15日
    浏览(48)
  • 三、计算机理论-关系数据库-结构化查询语言SQL

    SQL 概述 是一种介于关系代数与关系演算之间的语言,现成为关系数据库的标准语言 特点:综合统一、高度非过程化、面向集合的操作方式、以同一种语法结构提供两种使用方式(直接使用或者嵌入高级语言使用)、语言简洁,易学易用。 四大功能如下: SQL功能 动词 数据查

    2024年01月24日
    浏览(59)
  • 数据管理系统-week6-结构化查询语言(SQL)简介

    Structured Query Language(SQL),本节课内容比较轻松,主要介绍了SQL的结构化查询语言,简单介绍的一些SQL的特性,功能,格式化等内容 •由IBM在20世纪70年代中期开发和实施 •最初称为SEQUEL(结构化英语查询语言) •首次实施:IBM的SYSTEM R(DB/2,UDB)、Oracle SQL •1986年的第一个

    2024年01月16日
    浏览(49)
  • 使用阿里云试用Elasticsearch学习:2.1 深入搜索——结构化搜索

    结构化搜索(Structured search) 是指有关探询那些具有内在结构数据的过程。比如日期、时间和数字都是结构化的:它们有精确的格式,我们可以对这些格式进行逻辑操作。比较常见的操作包括比较数字或时间的范围,或判定两个值的大小。 文本也可以是结构化的。如彩色笔可

    2024年04月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包