### Elastic Search 学习笔记详解 #### 一、Elasticsearch 概述 Elasticsearch 是一个基于 Lucene 的搜索引擎,它提供了丰富的功能用于搜索、分析和存储数据。本篇学习笔记将围绕 Elasticsearch 的基本查询操作展开,包括前置过滤、查询与排序以及统计功能。 #### 二、查询基础 Elasticsearch 提供了多种查询方式,常见的有匹配查询、过滤查询等。其中,过滤查询是一种非常实用的方法,因为它能够快速地缩小搜索范围,提高查询效率。 #### 三、前置过滤查询 前置过滤是 Elasticsearch 中的一种特殊过滤类型,它主要用于匹配字符串前缀。这种方式非常适合用于快速筛选出具有相同前缀的文档集合。 **示例命令**: ```bash curl -XGET localhost:9200/baselinelog/bllog/_search?pretty -d'{"query":{"filtered":{"filter":{"bool":{"must":{"prefix":{"baselineId":"nfsdesktop3.18.2.10.a"}}}}}}}' ``` 在这个例子中,我们使用了 `prefix` 过滤器来查找 `baselineId` 字段以 `"nfsdesktop3.18.2.10.a"` 开头的所有文档。 #### 四、查询与排序 在实际应用中,我们不仅需要检索数据,还需要对结果进行排序以便更好地展示给用户。 **示例命令**: ```bash curl -XGET localhost:9200/baselinelog/bllog/_search?pretty -d'{"query":{"filtered":{"filter":{"bool":{"must":[{"range":{"time":{"from":1469443728,"to":1472035728,"include_lower":true,"include_upper":true}}}]}}}}}' ``` 此命令展示了如何使用 `range` 过滤器来限制时间范围,并返回该时间段内的所有文档。 **排序**: ```bash curl -XGET localhost:9200/baselinelog/bllog/_search?pretty -d'{"query":"filtered":{"filter":{"bool":{"must":[{"range":{"time":{"from":1469443733,"to":1472035733,"include_lower":true,"include_upper":true}}}]}}}}}' ``` 在此基础上添加排序指令: ```bash .addSort("time",SortOrder.DESC) ``` 这行代码表示按 `time` 字段降序排列查询结果。 #### 五、统计查询 除了基本的查询之外,Elasticsearch 还支持对数据进行聚合统计,这对于数据分析来说非常重要。 **示例命令**: ```bash curl -XGET localhost:9200/baselinelog/bllog/_search?pretty -d'{"query":{"filtered":{"query":{"match_all":{}},"filter":{"query":{"filtered":{"filter":{"bool":{"must":[{"range":{"time":{"from":1469443733,"to":1472035733,"include_lower":true,"include_upper":true}}},{"term":{"operatingResults":-1}}]}}}}}}},"aggregations":{"dayly":{"date_histogram":{"field":"time","interval":"1d"}}}}' ``` 这段命令通过 `date_histogram` 聚合函数统计了每天的数据量。 #### 六、Java API 实现查询 在实际开发中,我们通常会使用 Java API 来实现上述功能。 1. **引入 ES client**: ```java import org.elasticsearch.client.Client; ``` 2. **创建 FilteredQueryBuilder**: ```java FilteredQueryBuilder query = QueryBuilders.filteredQuery(null, null); ``` 3. **创建 BoolFilterBuilder**: ```java BoolFilterBuilder fb = FilterBuilders.boolFilter(); ``` 4. **构建 BoolFilterBuilder**: - **区间过滤**: ```java fb.must(FilterBuilders.rangeFilter("time").from(1469443733).to(1472035733)); ``` - **多个元素过滤**: ```java fb.must(FilterBuilders.termsFilter("operatingResults", Arrays.asList(-1, 0))); ``` - **单个元素过滤**: ```java fb.must(FilterBuilders.termFilter("operatingResults", -1)); ``` - **前置过滤**: ```java fb.must(FilterBuilders.prefixFilter("baselineId", "nfsdesktop3.18.2.10.a")); ``` 5. **赋值 FilteredQueryBuilder**: ```java query = QueryBuilders.filteredQuery(null, fb); ``` 6. **构建 SearchRequestBuilder**: ```java SearchRequestBuilder search = client.prepareSearch("baselinelog"); ``` 7. **SearchRequestBuilder 元素配置**: ```java search.setTypes("bllog"); search.setSearchType(SearchType.QUERY_AND_FETCH); ``` 8. **配置查询方式**: ```java search.setQuery(query) .addSort("time", SortOrder.DESC) .setFrom(pageable.getPageNumber()) .setSize(pageable.getPageSize()); ``` 9. **获取查询结果**: ```java SearchResponse response = search.execute().actionGet(); ``` #### 七、总结 通过上述内容的学习,我们可以了解到 Elasticsearch 提供了强大的查询能力,包括但不限于前置过滤、查询与排序以及统计等功能。利用 Java API,开发者可以轻松地将这些功能集成到自己的应用程序中,从而提升系统的数据处理能力和用户体验。
- 粉丝: 0
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- T型3电平逆变器,lcl滤波器滤波器参数计算,半导体损耗计算,逆变电感参数设计损耗计算 mathcad格式输出,方便修改 同时支持plecs损耗仿真,基于plecs的闭环仿真,电压外环,电流内环
- 毒舌(解锁版).apk
- 显示HEX、S19、Bin、VBF等其他汽车制造商特定的文件格式
- 8bit逐次逼近型SAR ADC电路设计成品 入门时期的第三款sarADC,适合新手学习等 包括电路文件和详细设计文档 smic0.18工艺,单端结构,3.3V供电 整体采样率500k,可实现基
- 操作系统实验 ucorelab4内核线程管理
- 脉冲注入法,持续注入,启动低速运行过程中注入,电感法,ipd,力矩保持,无霍尔无感方案,媲美有霍尔效果 bldc控制器方案,无刷电机 提供源码,原理图
- Matlab Simulink#直驱永磁风电机组并网仿真模型 基于永磁直驱式风机并网仿真模型 采用背靠背双PWM变流器,先整流,再逆变 不仅实现电机侧的有功、无功功率的解耦控制和转速调节,而且能实
- 157389节奏盒子地狱模式第三阶段7.apk
- 操作系统实验ucore lab3
- DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 这段程序是一个改进的粒子群算法,主要用于解决电力系统中的优化问题 下面我将对程序进行详