当前位置: 首页 > news >正文

使用 Bodybuilder 项目简化前端ES查询


bodybuild 分为4个部分

  • aggregation-builder
  • filter-builder
  • query-builder
  • suggestion-builder

index


通过 build 函数即可生成我们常用的es查询DSL

 build: function build(version) {var queries = this.getQuery();  var filters = this.getFilter();var aggregations = this.getAggregations();var suggestions = this.getSuggestions();if (version === 'v1') return _buildV1(body, queries, filters, aggregations);return _build(body, queries, filters, aggregations, suggestions);
}

从上述代码可以看出, bodybuild 通过获取其四大件即可 build 出一个关于ES查询的DSL脚本

入口文件还提供了以下函数

  • sort 在给定字段上设置排序方向。
  • from 设置from偏移量值,用于对查询进行分页。
  • size 设置size值以返回最大结果。
  • rawOption 在 elasticsearch 主体上设置任意键值。
  • clone 返回bodybuilder的克隆实例
 bodybuilder().andFilter('term', 'user', 'kimchy').from(2).size(3).sort('timestamp', 'desc')
{"from": 2,"size": 3,"sort": [{"timestamp": {"order": "desc"}}],"query": {"bool": {"filter": {"term": {"user": "kimchy"}}}}
}

query


/*** Add a query clause to the query body.** @param  {string}        type    查询类型。* @param  {string|Object} field   字段来查询或完成查询子句。* @param  {string|Object} value   查询项或内部子句* @param  {Object}        options (可选)查询子句的附加选项。* @param  {Function}      [nest]  (可选)用于将子过滤器定义为子过滤器的函数。这必须是最后一个参数。** @return {bodybuilder} Builder.*/
  • type 第一个参数为请求类型
  • field 需要查询的字段
  • value 匹配的值
bodybuilder().query('**match_all**').build()
{"query": {"**match_all**": {}}
}
bodybuilder().query('**match_all**', { boost: 1.2 }).build())
{"query": {"**match_all**": {"boost": 1.2}}
}
bodybuilder().query('**match**', 'message', 'this is a test').build())
{"query": {"**match**": {"message": "this is a test"}}
}
bodybuilder().query('**terms**', 'user', ['kimchy', 'elastic']).build())
{"query": {"**terms**": {"user": ["kimchy","elastic"]}}
}

上述三个查询 type 、field、value 结合即可完成简单的搜索查询

options 和 nest

 bodybuilder().query('nested', { path: 'obj1', score_mode: 'avg' }, (q) => {return q.query('match', 'obj1.name', 'blue').query('range', 'obj1.count', { gt: 5 })}).build()   // # ES DSL
{"query": {"nested": {"path": "obj1","score_mode": "avg","query": {"bool": {"must": [{"match": {"obj1.name": "blue"}},{"range": {"obj1.count": {"gt": 5}}}]}}}}
}

aggregation


/*** 向查询主体添加聚合子句。** @param  {string|Object} type      聚合类型的名称,如“sum”或“terms”。* @param  {string}        field     要聚合的字段的名称。* @param  {Object}        [options] (可选)要包含在聚合中的其他选项。*                         [options._meta] 将元数据与单个聚合关联起来*                         [options._name ] 另一种将自定义名称传递给聚合的方法。* @param  {string}        [name]    (可选) 聚合的自定义名称,默认为 `agg_<type>_<field>`.* @param  {Function}      [nest]    (可选) 用于将子聚合定义为子聚合的函数。这必须是最后一个参数。** @return {bodybuilder} Builder.**/

这种格式为聚合语句

下面case为type 和 filed的使用

bodybuilder().aggregation('max', 'price').build()
{"aggs":{"agg_max_price":{"max":{"field":"price"}}}
}

要包含在聚合中的其他选项。

 bodybuilder().aggregation('max', 'price', { percents: [95, 99

http://www.mrgr.cn/news/18286.html

相关文章:

  • C语言基础(三十三)
  • Java-数据结构-链表-LinkedList(一) (^_−)☆
  • 【最新华为OD机试E卷】猜字迷(100分)-多语言题解-(Python/C/JavaScript/Java/Cpp)
  • 【C++ Primer Plus习题】9.4
  • CSS瀑布流实现
  • 【操作系统】详述linux系统性能调优及技巧
  • 算法训练营|图论第10天 Bellman_ford:优化算法,判断负权算法,单源有限最短路
  • 【框架】在Spring Cloud分布式微服务框架中,一个请求的流转和处理的步骤
  • 干货含源码!如何用Java后端操作Docker(命令行篇)
  • 获取 包 的类名信息以及 使用类名信息反向实例化类
  • 网络是怎样连接的
  • LinkedList与链表
  • nginx配置代理https端口的要点
  • Java项目:128 基于Spring Boot的装饰工程管理系统
  • 【小呆的热力学笔记】典型热机-燃气轮机的理想热力循环
  • Java基础——十一、Lambda
  • 【C++】C++ 多态的底层实现
  • 26. 在集合中删除元素时,为什么使用Iterator.remove()而不是Collection.remove()?
  • 第二十章 rust多平台编译
  • 两个月冲刺软考——概念+求已知内存按字节编址从(A)…到(B)…的存储容量+求采用单/双缓冲区需要花费的时间计算 类型题目讲解