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 ...
随机推荐
- [LeetCode&Python] Problem 242. Valid Anagram
Given two strings s and t , write a function to determine if t is an anagram of s. Example 1: Input: ...
- 使用vendor管理go第三方包
安装verdor go get -u -v https://github.com/kardianos/govendor 记得将$GOPATH/bin加入PATH verdor使用 goverdor i ...
- 【BZOJ4566】【HAOI2016】找相同字符
后缀自动姬好,好写好调好ac 原题: 给定两个字符串,求出在两个字符串中各取出一个子串使得这两个子串相同的方案数.两个方案不同当且仅当这两 个子串中有一个位置不同. 1 <=n1, n2< ...
- ie6,ie7下a标签无法点击(转载)
前几天在做一个网站的引导页面,因为都是用图片,所以按钮需要用空a标签来做,发现a标签在IE6与IE7中点击无效中点击不了,其他浏览器都正常.一开始以为是z-index的问题,但不论z-index设置多 ...
- eclipse操作(备忘)
myecplise破解 https://blog.csdn.net/by_xiaobai007/article/details/81177367 1.查看类路径 2.建立模板 window--pr ...
- maven jar 怎么看jdk编译版本
查看jar包里面MANIFEST.MF文件Build-Jdk的信息 本例中:Build-Jdk:1.7.0_45 解决项目中依赖的jar与jdk冲突.
- Pycharm乱码解决
现象:输出栏出现乱码 解决方案: 结果:
- tomcat中配置https
HTTPS配置中分为单向连接和双向连接,单向连接只需要服务器安装证书,客户端不需要,双向连接需要服务器和客户端都安装证书: 一.Keytool命令: 1.生成密钥对: keytool -genkey ...
- sql server 用户创建与权限管理
要想成功访问 SQL Server 数据库中的数据, 我们需要两个方面的授权:一.获得准许连接 SQL Server 服务器的权利: 二.获得访问特定数据库中数据的权利(select, update, ...
- 修改ORA-28001 口令已经失效问题
Oracle默认密码的有效时间为180天,当超过180天时,将出现如下错误 解决方法: 使用Oracle SQL Developer登录Oralce, 以as sysdba登录 登录后,执行 sele ...