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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • wpf listview 分组_JAVA排序

    wpf listview 分组_JAVA排序网上很多方法,但是内容包含太全面,代码看上去很复杂,其实其中有很多是控制UI的,此种方法一行代码自动解决排序问题,另外,wpf的listview和winform的listview细节差别还是很多的。在WPF中ListView的排序最基本的原理很简单就一句话ListViewControl.Items.SortDescriptions.Add(newSortDescription(“name”,…

    2022年10月3日
    1
  • SQLServer2008安装教程[通俗易懂]

    SQLServer2008安装教程[通俗易懂]因为对接老系统的数据,上面使用的SQLServer2008,所以本机也需要SQLServer2008作对接。首当其冲的就是SQLServer2008的安装。1.下载sqlServer2008的安装包2.在安装包中点击setup.exe2.选择安装,再选择全新安装3.安装规则检测,等待通过后确认4.产品密钥会自动填充直接下一步(不截图说明)5.勾选“我接受”直接下一步(不截图说明)6.对于程序支持文件,点击安装;然后安装通过,点击下一步7.设置角色,选择“功..

    2022年6月23日
    41
  • Codeforces 474 F. Ant colony

    Codeforces 474 F. Ant colony

    2022年1月22日
    59
  • Linux文本编辑器——vim编译器的全面讲解[通俗易懂]

    Linux文本编辑器——vim编译器的全面讲解[通俗易懂]vim编译器一概述二vim编译器常用的操作命令2.1vim编辑器的启动和退出2.2文件的打开和读取2.3文件保存与另存为2.4vim编辑器的删除与撤销2.5vim编辑器的复制与粘贴2.6vim编辑器的查找与替换三vim输入模式常见操作3.1快速进入输入模式3.2快速移动编辑四vim命令模式常见操作4.1行内快速跳转4.2行间快速跳转

    2022年7月26日
    6
  • 常用的DNS列表(亲测可用)

    常用的DNS列表(亲测可用)如果经常遇到这样的问题:浏览器无法打开网站,但是qq、微信是正常使用的,说明DNS有问题。我们知道,默认情况下DNS是自动获取的,通常默认DNS就是路由器,然后由路由器负责向上一级路由查找,但是有时候路由器出现问题就可能造成上面的问题,那么如何一劳永逸的解决上面的问题呢?答案就是修改DNS,在手机、电脑上都可以更改,具体根据机型自行查找资料。以下是一些常用的DNS地址,亲测可用哦~…

    2022年6月9日
    40
  • LoadImage()的使用

    LoadImage()的使用

    2021年12月6日
    53

发表回复

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

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