Elasticsearch 基本使用(二)简单查询 & 嵌套查询

这篇具有很好参考价值的文章主要介绍了Elasticsearch 基本使用(二)简单查询 & 嵌套查询。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简单查询

按id查询单条记录

GET bank/_doc/1

es查询嵌套数组,Elasticsearch,elasticsearch,大数据,搜索引擎

查询所有数据

  • 默认只查询10条记录
GET bank/_search
{
  "query": {
    "match_all": {}
  }
}

es查询嵌套数组,Elasticsearch,elasticsearch,大数据,搜索引擎

  • 设置分页条件
GET bank/_search
{
  "query": {
  # 无条件查询
    "match_all": {}
  },
  # 偏移量,从第一条开始查
  "from": 0,
  # 记录条数
  "size": 1000
}

设置排序

两种设置方式

GET bank/_search
{
  "query": {
    "match_all": {}
  },
  "sort": [
    {
      "字段名": "asc"
    },
    {
      "字段名": {
        "order": "desc/asc"
      }
    }
  ]
}

注意:_id 为字符串,其排序方式为按位比较,并非数值大小

filter 过滤

在 bool 查询内,可以使用 filter 对数据进行过滤。
单从最终数据来看,filter 也是用于过滤数据,用于条件查询。
不同点在于,filter 查询的结果不进行评分,但也不影响bool查询内其他查询的评分结果。

# 查询 age = 10 & province = 600 的数据
# 使用 filter 过滤,filter 仅过滤数据,而不进行评分,当然也不影响 使用 query 内其他查询的评分结果
GET /stu/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "address",
            "query": {
              "term": {
                "address.province": {
                  "value": "600"
                }
              }
            }
          }
        }
      ],
      "filter": [
        {
          "term": {
            "age": 10
          }
        }
      ]
    }
  }
}

查询数组内的值查询

ES没有数组一说,对数组值的查询就像普通值那样查询即可。
数组内其中一项匹配就算成功
terms:在多个条件值里面匹配,匹配上一个就算成功。
term:只能传一个条件值,不分词的字段值 或者 数组内某项字段值 或者 字段分词后的词典 匹配上这个值就算成功。
直接匹配数组字段,只要匹配上数组内任一项(或者关系)就算成功;
如果要同时匹配数组内多个值,可以使用bool must 对多个值进行(与关系匹配)

# 查询 hobbies 包含 swimming 或者 music 的数据
GET /stu/_search
{
  "query": {
    "terms": {
      "hobbies": [
        "movie",
        "music"
      ]
    }
  }
}

可以查到以下数据


      {
        "_index" : "stu",
        "_type" : "_doc",
        "_id" : "jjoE7YgBKFUjhQBi3mz1",
        "_score" : 1.0,
        "_source" : {
          "id" : 2,
          "name" : "李四",
          "age" : 20,
          "hobbies" : [
            "music",
            "speaking",
            "drive"
          ],
          "address" : [
            {
              "province" : "500",
              "city" : "025",
              "county" : "1993"
            },
            {
              "province" : "502",
              "city" : "027",
              "county" : "1999"
            }
          ]
        }
      },
      {
        "_index" : "stu",
        "_type" : "_doc",
        "_id" : "jzoE7YgBKFUjhQBi_2zu",
        "_score" : 1.0,
        "_source" : {
          "id" : 3,
          "name" : "张三四",
          "age" : 30,
          "hobbies" : [
            "movie",
            "book",
            "swimming"
          ],
          "address" : [
            {
              "province" : "600",
              "city" : "021",
              "county" : "1887"
            },
            {
              "province" : "601",
              "city" : "073",
              "county" : "1953"
            }
          ]
        }
      }
    

嵌套查询

有时,我们查询的条件字段不在最外层;此时需要使用嵌套查询

  • 如果多个条件是在一个 nested 字段内,则可以在netsted 内的query 中使用 bool 查询
  • 如果多个条件不在同一个 nested 字段内,则在外层query中使用 bool 查询

查询一个外层条件字段 内的嵌套字段

GET xxx_index/_search
{
  "query": {
  	# 嵌套查询,其他字段该怎么查怎么查,如果还有不属于这个嵌套字段的其他条件,依然使用 bool ,处理
    "nested": {
      "path": "外层字段名",
      # 基于这个path,当前的层级,再写一个 普通的query
      "query": {
        "bool": {
        	# 多条件
          "must": [
            {
              "term": {
                "外层字段名.内层字段名1": 条件值1
              }
            },
            {
              "match_phrase": {
                "外层字段名.内层字段名2": 条件值2
              }
            }
          ]
        }
      }
    }
  }
}

查询多个条件,其中有嵌套字段

# 一个嵌套字段 & 一个普通字段
GET xxx_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "外层字段名1",
            "query": {
              "term": {
                "外层字段名1.内层字段名1": 条件值1
              }
            }
          }
        },
        {
          "match": {
            "外层字段名2": " 条件值2"
          }
        }
      ]
    }
  }
}

如果还有,其他外层字段,依旧在 外层 bool 里面加条件。

自定义查询字段

返回指定字段
{
  "_source": [
    "字段名",
    "字段名.属性名",
    "字段名.*"
  ],
  "query": {
    xxxx
  }
}

文章来源地址https://www.toymoban.com/news/detail-773201.html

{
  "_source": {
    "includes": [
      "字段名",
	  "字段名.属性名",
	  "字段名.*"
    ]
  },
  "query": {
    xxx
  }
}
不显示字段
{
  "_source": false,
  "query": {
    xxxx
  }
}
排除指定字段
{
  "_source": {
    "exclude": [
      "字段名",
	  "字段名.属性名",
	  "字段名.*"
    ]
  },
  "query": {
    xxxx
  }
}

到了这里,关于Elasticsearch 基本使用(二)简单查询 & 嵌套查询的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 如何使用ES做简单的时间条件过滤+模糊查询+精确匹配+关键字排除,查询 elasticsearch查询结果包含或排除某些字段、_source查询出需要的属性名称

    目录 一、时间条件过滤+模糊查询+精确匹配+排除 1. 查询出包含 log_geo 的数据 “wildcard”: { “message”: “log_geo” } 2. 查询某个时间段的数据 3. 条件查询与条件排除数据 4. from 表示起始的记录的ID 5. size 表示显示的记录数 6.sort排序 desc降序、asc升序  7.should查询在mysql中

    2024年01月18日
    浏览(59)
  • Elasticsearch ES 简单查询 Query String Search 入门

    尝试了text类型排序需要特别处理下. \\\"reason\\\" : \\\"Text fields are not optimised for operations that require per-document field data like aggregations and sorting, so these operations are disabled by default. Please use a keyword field instead. Alternatively, set fielddata=true on [name] in order to load field data by uninverting the inverted index.

    2024年02月16日
    浏览(41)
  • Elasticsearch基础学习-常用查询和基本的JavaAPI操作ES

    Elasticsearch是一个基于 lucene 、分布式、通过Restful方式进行交互的 近实时搜索 平台框架。 ELK技术栈是Elasticsearch、Logstash、Kibana三大开元框架首字母大写简称。 而Elasticsearch 是一个 开源的高扩展的分布式全文搜索引擎 , 是整个 ELK技术栈的核心。 Elasticsearch是一个基于lucene、分

    2024年02月11日
    浏览(51)
  • ES(Elasticsearch)的基本使用

    Redis是一个基于内存的 key-value 结构数据库。Redis是一款采用key-value数据存储格式的内存级 NoSQL数据库 ,重点关注数据存储格式,是key-value格式,也就是键值对的存储形式。与MySQL数据库不同,MySQL数据库有表、有字段、有记录,Redis没有这些东西,就是一个名称对应一个值,并

    2024年02月03日
    浏览(24)
  • Elasticsearch 基本使用(四)聚合查询

    说到聚合查询,马上会想到 SQL 中的 group by,ES中也有类似的功能,名叫 Aggregation。 统计分组后的数量 按年龄分组,然后统计每个年龄人数 count(*) ,age xxx group by age 非文档字段分组 文档字段分组 直接使用文档字段分组会报错。 ES没有对文本字段聚合,排序等操作优化;如果对

    2024年02月12日
    浏览(42)
  • Elasticsearch 基本使用(三)条件查询

    term 单词查询 对于不分词的字段( 数组 视同普通字段,查询数组字段时,只要匹配上一项就算匹配) 条件直接匹配字段值 对于分词的字段;在字段 倒排索引表,仅限分词结果 内查找条件值 terms 同样是单词查询;但条件值可以是多个值,效果为 term1 or term2 should : [ {term1…

    2024年02月11日
    浏览(35)
  • Elasticsearch嵌套查询must和mustNot

    场景:在bug关联固件的时候将bug的数据放到固件的数据下,可以根据固件数据下是否包含bug数据查询出已关联和未关联的数据。 ES文档结构 目录 1.must查询此bug关联的固件 java代码 2.mustNot查询此bug未关联的固件 java代码 3.劫后余生        4.闲来无事must_not跟must下的多条件关

    2024年02月07日
    浏览(31)
  • ElasticSearch入门:使用ES来实现模糊查询功能

    本文针对在工作中遇到的需求:通过es来实现 模糊查询 来进行总结;模糊查询的具体需求是:查询基金/A股/港股等金融数据,要求可以根据 字段 , 拼音首字母 , 部分拼音全称 进行联想查询;需要注意的是,金融数据名称中可能不止包含汉字,还有英文,数字,特殊字符等

    2023年04月09日
    浏览(40)
  • 【中间件】ElasticSearch:ES的基本概念与基本使用

    Index索引、Type类型,类似于数据库中的数据库和表,我们说,ES的数据存储在某个索引的某个类型中(某个数据库的某个表中),Document文档(JSON格式),相当于是数据库中内容的存储方式 MySQL:数据库、表、数据 ElasticSearch:索引、类型、文档 ElasticSearch的检索功能基于其倒

    2024年02月04日
    浏览(39)
  • java使用ElasticSearch的scroll查询,高效的解决es查询数量的限制。

    (1)首先我们要明白es的查询机制:ES的搜索是分2个阶段进行的,即 Query阶段和Fetch阶段 。 Query阶段 比较轻量级,通过查询倒排索引,获取满足查询结果的文档ID列表。 Fetch阶段 比较重,需要将每个分片的查询结果取回,在协调结点进行 全局 排序。 通过From+size这种方式分批

    2024年02月03日
    浏览(74)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包