FACET

1)Terms Facet

{
"query" : {
"match_all" : { }
},
"facets" : {
"tag" : {
"terms" : {
"field" : "tag",
"size" : 10
}
}
}
}

被统计(facet)的字段一般不分词(例如商品的类目字段——类目唯一),但也支持分词后term不多的字段(例如商品的标签字段)。  

对应这种facet我们主要关注几点:

facet的字段(field,multi fields)

facet返回的数量(top N)

facet排序(count,term,reverse_count,reverse_term)

facet作用范围(all terms,excluding terms,regex patterns,term script)

2)Range Facets

{
"query" : {
"match_all" : {}
},
"facets" : {
"range1" : {
"range" : {
"field" : "field_name",
"ranges" : [
{ "to" : 50 },
{ "from" : 50, "to" : 70 },
{ "from" : 70, "to" : 120 },
{ "from" : 120 }
]
}
}
}
}

例如:

商品的价格区间。

考虑下面一种需求:

统计各个价格区间购买次数。(每个商品有个销量字段)

{
"query" : {
"match_all" : {}
},
"facets" : {
"range1" : {
"range" : {
"key_field" : "price",
"value_field" : "volume",
"ranges" : [
{ "to" : 50 },
{ "from" : 50, "to" : 70 },
{ "from" : 70, "to" : 120 },
{ "from" : 120 }
]
}
}
}
}

3)Histogram Facet

实现直方图的效果,其实也算是range的一种。

{
"query" : {
"match_all" : {}
},
"facets" : {
"histo1" : {
"histogram" : {
"field" : "field_name",
"interval" : 100
}
}
}
}

interval可以理解为步长。除了number型还有time_interval。  

4)Date Histogram Facet

5)Filter Facets

{
"facets" : {
"wow_facet" : {
"filter" : {
"term" : { "tag" : "wow" }
}
}
}
}

返回命中“指定filter”的结果数。

6)Query Facets

{
"facets" : {
"wow_facet" : {
"query" : {
"term" : { "tag" : "wow" }
}
}
}
}

Q:FilterFacets VS. QueryFacets?

7)Statistical Facet

{
"query" : {
"match_all" : {}
},
"facets" : {
"stat1" : {
"statistical" : {
"field" : "num1"
}
}
}
}

StatisticalFacet需要作用在数值型字段上面,他会统计总数、总和、最值、均值等。

 8)Terms stats Facet

{
"query" : {
"match_all" : { }
},
"facets" : {
"tag_price_stats" : {
"terms_stats" : {
"key_field" : "tag",
"value_field" : "price"
}
}
}
}

也是一个kv的统计,例如统计某某类目下价格的分布情况(最值、均值等)。

9)GEO distance Facet

--------------------------------------------------

javaClient Demo:

public void facet() {
SearchResponse sr = client.prepareSearch()
.setQuery(QueryBuilders.matchAllQuery())
.addFacet(FacetBuilders.termsFacet("f1").field("price"))
.execute().actionGet(); // Get your facet results
TermsFacet f = (TermsFacet) sr.getFacets().facetsAsMap().get("f1"); System.out.println(f.getTotalCount()); // Total terms doc count
System.out.println(f.getOtherCount()); // Not shown terms doc count
System.out.println(f.getMissingCount()); // Without term doc count // For each entry
for (TermsFacet.Entry entry : f) {
System.out.println("t:" + entry.getTerm()); // Term
System.out.println("c:" + entry.getCount()); // Doc count
System.out.println("----");
}
}

  

elasticsearch 口水篇(9)Facet的更多相关文章

  1. elasticsearch 口水篇(4)java客户端 - 原生esClient

    上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...

  2. elasticsearch 口水篇(2)CRUD Sense

    Sense 为了方便.直观的使用es的REST Api,我们可以使用sense.Sense是Chrome浏览器的一个插件,使用简单. 如图: Sense安装: https://chrome.googl ...

  3. elasticsearch 口水篇(1) 安装、插件

    一)安装elasticsearch 1)下载elasticsearch-0.90.10,解压,运行\bin\elasticsearch.bat (windwos) 2)进入http://localho ...

  4. elasticsearch 口水篇(8)分词 中文分词 ik插件

    先来一个标准分词(standard),配置如下: curl -XPUT localhost:9200/local -d '{ "settings" : { "analys ...

  5. elasticsearch 口水篇(7) Eclipse中部署ES源码、运行

    ES源码可以直接从svn下载 https://github.com/elasticsearch/elasticsearch 下载后,用Maven导入(import——>Existing Mave ...

  6. elasticsearch 口水篇(6) Mapping 定义索引

    前面我们感觉ES就想是一个nosql数据库,支持Free Schema. 接触过Lucene.solr的同学这时可能会思考一个问题——怎么定义document中的field?store.index.a ...

  7. elasticsearch 口水篇(3)java客户端 - Jest

    elasticsearch有丰富的客户端,java客户端有Jest.其原文介绍如下: Jest is a Java HTTP Rest client for ElasticSearch.It is a ...

  8. elasticsearch 口水篇(5)es分布式集群初探

    es有很多特性,分布式.副本集.负载均衡.容灾等. 我们先搭建一个很简单的分布式集群(伪),在同一机器上配置三个es,配置分别如下: cluster.name: foxCluster node.nam ...

  9. elasticsearch查询篇索引映射文档数据准备

    elasticsearch查询篇索引映射文档数据准备 我们后面要讲elasticsearch查询,先来准备下索引,映射以及文档: 我们先用Head插件建立索引film,然后建立映射 POST http ...

随机推荐

  1. Unity调用Windows对话框保存时另存为弹框

    Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  2. 外部javascript

  3. EasyUI datagrid 选择单元格 出现文本框 修改 四

    @disabled = "disabled", 只读属性 数据初始化 public JsonResult RateList(string dispatch_number, stri ...

  4. Install Java on Ubuntu server

    准备工作 a) 获得超级用户权限 关于超级用户访问权限的说明: 要将 Java 安装在系统级位置(例如 /usr/java),则必须以超级用户身份登录,从而获得必要的权限.如果您不具有超级用户访问权限 ...

  5. ACM-ICPC 2018 北京赛区网络预赛(9.22)

    #include<bits/stdc++.h> using namespace std; ; *maxn]; *maxn]; *maxn]; int main() { int T; sca ...

  6. U盘支持启动windows和Linux

    1.我是利用大白菜先按照普通方法制作可以引导windows的启动盘,这个没什么好说了,就不多说了. 2.在U盘的根目录下添加一个放Ubuntu镜像的文件夹,然后将Ubuntu的iso文件拷贝至这个目录 ...

  7. Java线程池 详解(图解)

    来源:www.jianshu.com/p/098819be088c 拓展: 手动创建 new ThreadPoolExecutor 的使用: https://segmentfault.com/a/11 ...

  8. 4.input()

    >>> help(input) Help on built-in function input in module builtins: input(prompt=None, /) R ...

  9. Create-React-App脚手架使用方法

    Facebook 官方推出Create-React-App脚手架,基本可以零配置搭建基于webpack的React开发环境,内置了热更新等功能. 由于create-react-app命令预先安装和配置 ...

  10. 使用sync 修饰符------子组件内部可以修改props

    首先看一个需求,外部点击一个按钮,让弹窗组件显示(也就是将弹窗组件显示的flag置为true),点击弹窗组件内部的某个按钮 ,让改props置为false,关闭弹窗,但是会报警告,因为内层组件不能修改 ...