ElasticSearch 简单的 搜索 聚合 分析

ElasticSearch 简单的 搜索 聚合 分析一、搜索1.DSL搜索全部数据没有任何条件查询名称包含xxx的商品,同时按照价格降序排序分页查询商品from第几条开始size获取几条查询结果中返回的字段设置2、query

大家好,又见面了,我是你们的朋友全栈君。

一、 搜索
1.DSL搜索

全部数据没有任何条件

GET /shop/goods/_search
{
  "query": { "match_all": {} }
}

 

查询名称包含 xxx 的商品,同时按照价格降序排序

GET /shop/goods/_search
{
    "query" : {
        "match" : {
            "name" : "xxx"
        }
    },
    "sort": [
        { "price": "desc" }
    ]
}

 

分页查询商品 from 第几条开始 size 获取几条

GET /shop/goods/_search
{
  "query" : {
        "match" : {
            "name" : "xxx"
        }
    },
  "from": 1,
  "size": 1
}

 

查询结果中返回的字段 设置

查询结果中返回的字段 设置
GET /shop/goods/_search
{
  "query" : {
        "match" : {
            "name" : "xxx"
        }
    },
  "_source": ["name", "price"]
}

 

 

 

2、query filter

搜索商品名称包含xxx,而且售价大于25元的商品

GET /shop/goods/_search
{
    "query" : {
        "bool" : {
            "must" : {
                "match" : {
                    "name" : "xxx" 
                }
            },
            "filter" : {
                "range" : {
                    "price" : { "gt" : 25 } 
                }
            }
        }
    }
}

 

3、full-text search(全文检索)

GET /shop/goods/_search
{
    "query" : {
        "match" : {
            "producer" : "xxx"
        }
    }
}

 

 

4、phrase search(短语搜索)
短语搜索的功能和全文检索相对应,全文检索会将输入的搜索串拆解开来,去倒排索引里面去一一匹配,只要能匹配上任意一个拆解后的单词,就可以作为结果返回
phrase search,要求输入的搜索串,必须在指定的字段文本中,完全包含一模一样的,才可以算匹配,才能作为结果返回

 

GET /shop/goods/_search
{
    "query" : {
        "match_phrase" : {
            "producer" : "xxx"
        }
    }
}

 

5 highlight search(高亮搜索结果)

高亮优化:
方式1:传统plain高亮方式。
官网明确支持,该方式匹配慢,如果出现性能问题,请考虑其他高亮方式。
方式2: postings 高亮方式。
方式3: fast-vector-highlighter 简称fvh高亮方式。

GET /shop/goods/_search
{
    "query" : {
        "match" : {
            "producer" : "xxx"
        }
    },
    "highlight": {
        "fields" : {
            "producer" : {}
        }
    }
}

 

二、 聚合、分析

5.x以后对排序,聚合这些操作用单独的数据结构(fielddata)缓存到内存里了,需要单独开启。
开启字段的fielddata

PUT /shop/_mapping/goods
{
  "properties": {
    "tags": {
      "type": "text",
      "fielddata": true
    }
  }
}

 

1、计算每个tag下的商品数量

GET /shop/goods/_search
{
  "aggs": {
    "group_by_tags": {
      "terms": { "field": "tags" }
    }
  }
}

 

size表示不返回文档 只返回聚合分析后的结果 group_by_tags和all_tags 只是给本次聚合 起一个名字 没有功能的区别

GET /shop/goods/_search
{
  "size": 0,
  "aggs": {
    "all_tags": {
      "terms": { "field": "tags" }
    }
  }
}

 

 

2、对名称中包含xxx的商品,计算每个tag下的商品数量

GET /shop/goods/_search
{
  "size": 0,
  "query": {
    "match": {
      "name": "yagao"
    }
  },
  "aggs": {
    "all_tags": {
      "terms": {
        "field": "tags"
      }
    }
  }
}

 

3、先分组,再算每组的平均值,计算每个tag下的商品的平均价格

GET /shop/goods/_search
{
    "size": 0,
    "aggs" : {
        "group_by_tags" : {
            "terms" : { "field" : "tags" },
            "aggs" : {
                "avg_price" : {
                    "avg" : { "field" : "price" }
                }
            }
        }
    }
}

 

4、计算每个tag下的商品的平均价格,并且按照平均价格降序排序

GET /shop/goods/_search
{
    "size": 0,
    "aggs" : {
        "all_tags" : {
            "terms" : { "field" : "tags", "order": { "avg_price": "desc" } },
            "aggs" : {
                "avg_price" : {
                    "avg" : { "field" : "price" }
                }
            }
        }
    }
}

 

5、按照指定的价格范围区间进行分组,然后在每组内再按照tag进行分组,最后再计算每组的平均价格

GET /shop/goods/_search
{
  "size": 0,
  "aggs": {
    "group_by_price": {
      "range": {
        "field": "price",
        "ranges": [
          {
            "from": 0,
            "to": 20
          },
          {
            "from": 20,
            "to": 40
          },
          {
            "from": 40,
            "to": 50
          }
        ]
      },
      "aggs": {
        "group_by_tags": {
          "terms": {
            "field": "tags"
          },
          "aggs": {
            "average_price": {
              "avg": {
                "field": "price"
              }
            }
          }
        }
      }
    }
  }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155270.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • php用哪个版本_php什么版本好

    php用哪个版本_php什么版本好一. PHP5.2、5.3、5.4、5.5、5.6版本区别对比以及新功能详解1.php5.2以前1.1autoload的使用;当在代码中使用一个未定义的类的时候,该函数就会被调用

    2022年8月2日
    7
  • java.lang包中不能被继承的类

    java.lang包中不能被继承的类public final class Bytepublic final class Characterpublic static final class Character.UnicodeBlockpublic final class Class<T>public final class Compiler //编译器public final class Doublepub…

    2022年6月13日
    27
  • opacity属性时css中专门用来指定透明度的一个属性[通俗易懂]

    opacity属性时css中专门用来指定透明度的一个属性[通俗易懂]css3之前,在样式中指定的颜色值只能为RGB颜色值,并且只能通过opacity属性来设置元素的透明度。CSS3中增加了3种颜色值-RGBA颜色值,HSL颜色值及HSLA颜色值,并且允许通过对RGBA颜色值和HSLA颜色值设定alpha通道的方法来更加容易地实现将半透明文字与图像互相重叠的效果。alpha通道与opacity属性的区别opacity属性时css中

    2022年5月25日
    37
  • 开挂网站免费版_开心ol辅助脚本

    开挂网站免费版_开心ol辅助脚本开讲。做一个Web游戏外挂需要的准备知识:1)需要有耐心2)熟悉HTML,JavaScript,特别是FORM3)熟悉HTTP协议,特别是Cookie,URL的编码方式和POST,GET内容格式4)熟悉游戏本身,能抽象出最优的赚钱/升级的数学模型5)掌握一门语言,白菜萝卜都可以,我比较喜欢用Python和C#6)需要一些抓包的工具,比如Fiddle…

    2025年11月8日
    4
  • PLSQL连接Oracle数据库时报ORA 12154错误的解决方法

    PLSQL连接Oracle数据库时报ORA 12154错误的解决方法pl/sql连接Oracle时遇到的问题:解决办法:安装后将Oracle安装目录下的文件夹network(包括其中的子文件,其中主要是tnsnames.ora)在pl/sql菜单–“工具-首选项”中如下配置:重启pl/sql即可。原理解释:在程序中连接Oracle数据库的方式与其他常用数据库,如:MySql,SqlServer不同,这些数据库可以通过直接指定IP的方式连接,但是Or…

    2022年7月24日
    50
  • SAP ETL开发规范「建议收藏」

    SAP ETL开发规范「建议收藏」1  介绍SAPBusinessObjects数据服务是一种提取,转换和加载(ETL)工具,用于在源环境和目标环境之间移动和操作数据。SAP数据服务提供了一个数据管理平台,可支持各种举措,包括商业智能,数据迁移,应用程序集成和更多特定应用程序。SAPDataServices是应用程序中的可执行组件,可以在批处理或实时(服务)架构中部署。以下文档详细介绍了有关SAPDataServi…

    2022年6月12日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号