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"
              }
            }
          }
        }
      }
    }
  }
}

 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • pycharm单行和多行注释快捷键_c语言基本函数及解释

    pycharm单行和多行注释快捷键_c语言基本函数及解释对所编写的函数****快速进行多行注释**:**重点——小灯泡定义一个函数如下,款素插入多行注释,效果如下:deffunc1(char,time):”””打印多行分割线:paramchar:分割线使用的分割字符:paramtime:分割线重复次数”””print(char*time)func1(“o”,)其中注释段插入步骤:在定义函数头后deffunc1(char,time):光标放到函数名上,等小灯泡出现,点

  • void及void指针含义的深刻解析

    void及void指针含义的深刻解析

  • c++中对象和类的关系_类的对象只能访问该类的私有成员

    c++中对象和类的关系_类的对象只能访问该类的私有成员类以及类和对象的关系以及类的访问修饰符一.类的概念:二.类和对象的关系:三.类的组成:四.类的创建:五.类的访问修饰符:一.类的概念:类是对于某一类对象的一个统称,类是对象的抽象化,对象是类的实例。定义一个类时,相当于定义了一个数据类型的蓝图。但实际上并没有定义任何的数据,但它定义了类的名称意味着什么,也就是说,类的对象由什么组成及在这个对象上可执行什么操作,就是单纯的进行了一个定义。二.类和对象的关系:类就是对象的抽象化概念,一个类就是一个对象集合的总称,通俗的来讲就是对象需要什么这个类就提供什么

    2022年10月23日
  • linux下mysql常用命令_shell命令大全

    linux下mysql常用命令_shell命令大全一、总结一下:1.linux下启动mysql的命令:mysqladminstart/ect/init.d/mysqlstart(前面为mysql的安装路径)2.linux下重启mysql的命令:mysqladminrestart/ect/init.d/mysqlrestart(前面为mysql的安装路径)3.linux下关闭mysql的命令:mysqladminshutdown/ec…

  • linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]

    linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]先介绍一下什么是csv文件,这是一种简单的文本文件,也被称为逗号分隔值文件。linux主要是用于存储简单的数据,下面在weindows下用UE简单生成一下文件。vim而后用excel打开windows这就是一个简单的csv文件,每一个字符都是一个ANSI码,图中的第一行,1,2,3,4,5,7。数组1~7每个都是一个ANSI码,一个逗号也是ANSI码。函数第二行的12,13,434,45,56…

  • Matlab绘图方法整理(超完整版)

    Matlab绘图方法整理(超完整版)超详细版Matlab绘图方法整理,1万字文章让你流畅掌握Matlab作图方法,保证你能完全掌握常用作图手段,谁又不想做一幅详细、美丽的图呢?

发表回复

您的电子邮箱地址不会被公开。

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