七、ElasticSearch-高级查询操作三

这篇具有很好参考价值的文章主要介绍了七、ElasticSearch-高级查询操作三。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、高亮查询

在进行关键字搜索时,搜索出的内容中的关键字会显示不同的颜色,称之为高亮。
Elasticsearch 可以对查询内容中的关键字部分,进行标签和样式 ( 高亮 ) 的设置。
在使用 match 查询的同时,加上一个 highlight 属性:
  • pre_tags:前置标签
  • post_tags:后置标签
  • fields:需要高亮的字段
  • title:这里声明 title 字段需要高亮,后面可以为这个字段设置特有配置,也可以空
GET /my_index_data/_search
{
 "query": {
 "match": {
 "first_name": "tom6"
 }
 },
 "highlight": {
 "pre_tags": "<font color='red'>",
 "post_tags": "</font>",
 "fields": {
 "first_name": {}
 }
 } }


####结果
{
  "took" : 266,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 1.7155422,
    "hits" : [
      {
        "_index" : "my_index_data",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : 1.7155422,
        "_source" : {
          "first_name" : "tom6",
          "last_name" : "Smith tom1",
          "age" : 39
        },
        "highlight" : {
          "first_name" : [
            "<font color='red'>tom6</font>"
          ]
        }
      }
    ]
  }
}

2、分页查询

from :当前页的起始索引,默认从 0 开始。 from = (pageNum - 1) * size
size :每页显示多少条
#####模糊查询first_name为tom 按照age倒叙排序,前两条数据
GET /my_index_data/_search
{
  "query": {
    "fuzzy": {
      "first_name": {
        "value": "tom"
      }
    }
  },
  "sort": [
    {
      "age": {
        "order": "desc"
      }
    }
  ],
  "from": 0,
  "size": 2
}

########结果
{
  "took" : 44,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 5,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [
      {
        "_index" : "my_index_data",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : null,
        "_source" : {
          "first_name" : "tom3",
          "last_name" : "Smith",
          "age" : 39
        },
        "sort" : [
          39
        ]
      },
      {
        "_index" : "my_index_data",
        "_type" : "_doc",
        "_id" : "6",
        "_score" : null,
        "_source" : {
          "first_name" : "tom6",
          "last_name" : "Smith tom1",
          "age" : 39
        },
        "sort" : [
          39
        ]
      }
    ]
  }
}

3、聚合查询

聚合允许使用者对 es 文档进行统计分析,类似与关系型数据库中的 group by ,当然还有很
多其他的聚合,例如取最大值、平均值等等。
  • 对age取最大值 max
GET /my_index_data/_search
{
  "aggs": {
    "max_age【别名】": {
      "max": {
        "field": "age"
      }
    }
  },
  "size": 0 
}


#结果
{
  "took" : 44,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "max_age" : {
      "value" : 39.0
    }
  }
}
  • 对age取最小值min
GET /my_index_data/_search
{
  "aggs": {
    "min_age": {
      "min": {
        "field": "age"
      }
    }
  },
  "size": 0 
}

###结果
{
  "took" : 7,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "min_age" : {
      "value" : 20.0
    }
  }
}
  • 求和
GET /my_index_data/_search
{
  "aggs": {
    "ageSum": {
      "sum": {
        "field": "age"
      }
    }
  },
  "size": 0 
}


#####求和结果
{
  "took" : 5,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "ageSum" : {
      "value" : 255.0
    }
  }
}
  • 平均值
GET /my_index_data/_search
{
  "aggs": {
    "ageAvg": {
      "avg": {
        "field": "age"
      }
    }
  },
  "size": 0 
}


#平均值
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "ageAvg" : {
      "value" : 31.875
    }
  }
}
  • 数据总数count
GET /my_index_data/_search
{
  "aggs": {
    "count": {
      "value_count": {
        "field": "age"
      }
    }
  }, 
  "size": 0 
}

####结果
{
  "took" : 35,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "count" : {
      "value" : 8
    }
  }
}
  • 数据总数count (去重之后)
GET /my_index_data/_search
{
  "aggs": {
    "distinct_age": {
      "cardinality": {
        "field": "age"
      }
    }
  }, 
  "size": 0 
}

####结果
{
  "took" : 35,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "distinct_age" : {
      "value" : 6
    }
  }
}

4、State 聚合

stats 聚合,对某个字段一次性返回 count max min avg sum 五个指标
GET /my_index_data/_search
{
 "aggs":{
 "stats_age":{
 "stats":{"field":"age"}
 }
 },
 "size":0
}



####结果
{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "stats_age" : {
      "count" : 8,
      "min" : 20.0,
      "max" : 39.0,
      "avg" : 31.875,
      "sum" : 255.0
    }
  }
}

5、桶聚合查询

桶聚和相当于 sql 中的 group by 语句
terms 聚合,分组统计
#####对age group by
GET /my_index_data/_search
{
 "aggs":{
 "age_groupby":{
 "terms":{"field":"age"}
 }
 },
 "size":0
}


########结果
{
  "took" : 26,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 8,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "age_groupby" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [
        {
          "key" : 30,
          "doc_count" : 2
        },
        {
          "key" : 39,
          "doc_count" : 2
        },
        {
          "key" : 20,
          "doc_count" : 1
        },
        {
          "key" : 29,
          "doc_count" : 1
        },
        {
          "key" : 33,
          "doc_count" : 1
        },
        {
          "key" : 35,
          "doc_count" : 1
        }
      ]
    }
  }
}

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

到了这里,关于七、ElasticSearch-高级查询操作三的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • Elasticsearch入门之Http操作(高级查询)

    Http操作: 高级查询: 高级查询:Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询 初始化数据: 查询所有文档: 在 Postman 中,向 ES 服务器发 GET 请求 :http://172.18.20.254:9200/shopping/_search 返回值: 返回值解释: 匹配查询: match 匹配类型查询,会把查询条件进行分词

    2024年02月02日
    浏览(43)
  • SpringBoot操作ES进行各种高级查询(值得收藏)

    创建SpringBoot项目,导入 ES 6.2.1 的 RestClient 依赖和 ES 依赖。在项目中直接引用 es-starter 的话会报容器初始化异常错误,导致项目无法启动。如果有读者解决了这个问题,欢迎留言交流 为容器定义 RestClient 对象 在 yml 文件中配置 eshost 调用相关 API 执行操作 创建操作索引的对象

    2024年02月03日
    浏览(86)
  • C#操作MySQL从入门到精通(8)——对查询数据进行高级过滤

    我们在查询数据库中数据的时候,有时候需要剔除一些我们不想要的数据,这时候就需要对数据进行过滤,比如学生信息中,我只需要年龄等于18的,同时又要家乡地址是安徽的,类似这种操作专栏第7篇的C#操作MySQL从入门到精通(7)——对查询数据进行简单过滤简单过滤方法就

    2024年04月15日
    浏览(53)
  • 原生语言操作和spring data中RestHighLevelClient操作Elasticsearch,索引,文档的基本操作,es的高级查询.查询结果处理. 数据聚合.相关性系数打分

    ​ Elasticsearch 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它能很方便的使大量数据具有搜索、分析和探索的能力。充分利用Elasticsearch的水平伸缩性,能使数据在生产环境变得更有价值。Elasticsearch 的实现原理主要分为以下几个步骤,首先用户将数据提交到Elasti

    2024年02月05日
    浏览(86)
  • SpringBoot操作ES进行各种高级查询(值得收藏),阿里P7大佬手把手教你

    for(SearchHit hit:searchHits){ // 文档的主键 String id = hit.getId(); // 源文档内容 MapString, Object sourceAsMap = hit.getSourceAsMap(); String name = (String) sourceAsMap.get(“name”); // 由于前边设置了源文档字段过虑,这时description是取不到的 String description = (String) sourceAsMap.get(“description”

    2024年04月24日
    浏览(44)
  • 【ElasticSearch】JavaRestClient实现文档查询、排序、分页、高亮

    先初始化JavaRestClient对象: 代码和DSL对应上就是: 运行结果: 然后是对结果的解析,对照响应结果: 示例代码: 运行结果: 总结: 构建DSL是通过HighLevelRestClient中的resource()方法来实现的,这里包含了查询、排序、分页、高亮等操作 构建查询条件的核心部分,即查询类型,

    2024年02月14日
    浏览(47)
  • ElasticSearch - 基于 JavaRestClient 查询文档(match、精确、复合查询,以及排序、分页、高亮)

    目录 一、基于 JavaRestClient 查询文档 1.1、查询 API 演示 1.1.1、查询基本框架 DSL 请求的对应格式 响应的解析 1.1.2、全文检索查询 1.1.3、精确查询 1.1.4、复合查询 1.1.5、排序和分页 1.1.6、高亮 1.1.1、查询基本框架 接下里通过一个 match_all 查询所有,来演示以下基本的 API. 由上可

    2024年02月07日
    浏览(48)
  • ElasticSearch DSL语句(bool查询、算分控制、地理查询、排序、分页、高亮等)

    查询所有:查询所有数据,一般在测试时使用。march_all,但是一般显示全部,有一个分页的功能 全文检索(full text)查询:利用分词器对用户的输入内容进行分词,然后去倒排索引库匹配。例如: match_query mutil_match_query 精确查询:根据精确词条值查询数据,一般查找的时k

    2024年02月12日
    浏览(52)
  • SpringBoot 整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮

    准备一个空的SpringBoot项目 写入依赖 注意你的SpringBoot和你的es版本,一定要对应,如果不知道的可以查看这篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安装es请看这篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    浏览(53)
  • springboot——集成elasticsearch进行搜索并高亮关键词

    目录 1.elasticsearch概述 3.springboot集成elasticsearch 4.实现搜索并高亮 (1)是什么: Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。 Lucene 可以被认为是迄今为止最先进、性能最好的、功能最全的搜索引擎库。但Lucene 只是一个基于java下的库,需要使用 Java 并要

    2023年04月20日
    浏览(107)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包