elasticsearch 口水篇(9)Facet
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的更多相关文章
- elasticsearch 口水篇(4)java客户端 - 原生esClient
上一篇(elasticsearch 口水篇(3)java客户端 - Jest)Jest是第三方客户端,基于REST Api进行调用(httpClient),本篇简单介绍下elasticsearch原生 ...
- elasticsearch 口水篇(2)CRUD Sense
Sense 为了方便.直观的使用es的REST Api,我们可以使用sense.Sense是Chrome浏览器的一个插件,使用简单. 如图: Sense安装: https://chrome.googl ...
- elasticsearch 口水篇(1) 安装、插件
一)安装elasticsearch 1)下载elasticsearch-0.90.10,解压,运行\bin\elasticsearch.bat (windwos) 2)进入http://localho ...
- elasticsearch 口水篇(8)分词 中文分词 ik插件
先来一个标准分词(standard),配置如下: curl -XPUT localhost:9200/local -d '{ "settings" : { "analys ...
- elasticsearch 口水篇(7) Eclipse中部署ES源码、运行
ES源码可以直接从svn下载 https://github.com/elasticsearch/elasticsearch 下载后,用Maven导入(import——>Existing Mave ...
- elasticsearch 口水篇(6) Mapping 定义索引
前面我们感觉ES就想是一个nosql数据库,支持Free Schema. 接触过Lucene.solr的同学这时可能会思考一个问题——怎么定义document中的field?store.index.a ...
- elasticsearch 口水篇(3)java客户端 - Jest
elasticsearch有丰富的客户端,java客户端有Jest.其原文介绍如下: Jest is a Java HTTP Rest client for ElasticSearch.It is a ...
- elasticsearch 口水篇(5)es分布式集群初探
es有很多特性,分布式.副本集.负载均衡.容灾等. 我们先搭建一个很简单的分布式集群(伪),在同一机器上配置三个es,配置分别如下: cluster.name: foxCluster node.nam ...
- elasticsearch查询篇索引映射文档数据准备
elasticsearch查询篇索引映射文档数据准备 我们后面要讲elasticsearch查询,先来准备下索引,映射以及文档: 我们先用Head插件建立索引film,然后建立映射 POST http ...
随机推荐
- c# 移动鼠标到指定位置
/// <summary> /// 引用user32.dll动态链接库(windows api), /// 使用库中定义 API:SetCursorPos /// </summary ...
- C#语法-虚方法详解 Virtual 虚函数
虚方法 / Virtual 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享. ...
- HDU4328 Cut the cake(动规:最大子矩形问题/悬线法)
题目链接:传送门 题目大意: 给出N*M的字符矩阵(由字符B/R组成),求符合下图条件的子矩阵的最大周长. 1 ≤ N,M ≤ 1000. 思路: 悬线法. #include <iostream ...
- HDU2029:Palindromes _easy version
Problem Description "回文串"是一个正读和反读都一样的字符串,比如"level"或者"noon"等等就是回文串.请写一个 ...
- 关于 transparent rgba display:none; opacity visiblity 关于em
关于 transparent rgba display:none; opacity visiblity display 之后不会占位. 其余都会占位 opacity 还会继承,子元素也会 ...
- cenos7.0 安装docker
使用yum命令在线安装 yum install docker 安装后查看Docker版本 docker -v启动docker:systemctl start docker停止docker:syste ...
- functional program language
1.什么是函数式编程语言 函数式语言(functional language)一类程序设计语言,是一种非冯·诺伊曼式的程序设计语言.函数式语言主要成分是原始函数.定义函数和函数型.这种语言具有较强的组 ...
- 【HAOI2011】problem a
又看题解了,这样下去要跪啊QAQ 原题: 一次考试共有n个人参加,第i个人说:“有ai个人分数比我高,bi个人分数比我低.”问最少有几个人没有说真话(可能有相同的分数) 1≤n≤100000 0≤ ...
- sudo权限的设置
什么是sudo,为什么要sudo呢?就我个人愚见普通用户sudo之后拥有root用户的所有权限,其优点在于,虽然该用户拥有root权限,但他却不需要知道root用户密码,需要输入的是他本身的密码. 那 ...
- Linux内核Inotify机制学习笔记
一.Inotify简介: Inotify是一种文件变化通知机制,Linux内核从2.6.13开始引入.它是一个内核用于通知用户空间程序文件系统变化的机制.开源社区提出用户态需要内核提供一些机制,以便用 ...