客户端编程可以自己封装json http请求,也可以采用es客户端API。这里介绍API方式。
1. 初始化Client
public void init() {
String clusterName="elasticsearch";
String ip= "192.168.180.15";
Settings settings = Settings.settingsBuilder()
.put("cluster.name", clusterName)
.build();
try {
client = TransportClient.builder()
.settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip),9300));
createMapping("index", "type"); } catch (Exception e) {
e.printStackTrace();
}
}
分词映射:
private void createMapping(String indices,String mappingType)throws Exception{
new XContentFactory();
XContentBuilder builder=XContentFactory.jsonBuilder()
.startObject()
.startObject(mappingType)
.startObject("properties")
.startObject("XXX").field("type", "string").field("store", "yes").field("index","not_analyzed").endObject()
.startObject("YYY").field("type", "string").field("store", "yes").field("analyzer", "ik").endObject()
.startObject("ZZZ").field("type", "double").field("store", "yes").field("index","not_analyzed").endObject() .endObject()
.endObject()
.endObject();
PutMappingRequest mapping = Requests.putMappingRequest(indices).type(mappingType).source(builder);
client.admin().indices().putMapping(mapping).actionGet();
}
XXX,YYY,ZZZ代表业务字段,因为只演示技术,所以以虚拟字段代替。
2. 创建索引
//其中的map为业务数据,key=XXX/YYY/ZZZ
private void createChineseIndex(String id, Map<String, Object> map) throws Exception{
client.prepareIndex("index", "type", id).setSource(generateJson(map))
.execute().actionGet();
}
//生成json请求数据
private String generateJson(Map<String, Object> map) {
String json = "";
try {
XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
.startObject();
for(String key:map.keySet()){
contentBuilder.field(key, map.get(key));
}
json = contentBuilder.endObject().string();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
3. 分组统计
private String searchGoodsName(String goodsName) {
String fullGoodsName=null;
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.COUNT)
.setQuery(QueryBuilders.termQuery("XXX", goodsName))
.addAggregation(AggregationBuilders.terms("gCount").field("YYY"))
.execute().actionGet();
StringTerms gNameTerms = (StringTerms) response.getAggregations().get("gCount");
Iterator<Bucket> gradeBucketIt = gNameTerms.getBuckets().iterator();
while(gradeBucketIt.hasNext())
{
Bucket gradeBucket = gradeBucketIt.next();
System.out.println("名称:"+gradeBucket.getKey() + ",数量" + gradeBucket.getDocCount());
if(fullGoodsName==null){
fullGoodsName=gradeBucket.getKey().toString();
}
}
return fullGoodsName;
}
4.排序
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.termQuery("XXX", name)) // Query
.setPostFilter(QueryBuilders.termQuery("YYY", value))
.addSort("ZZZ", SortOrder.ASC) // Filter
.setFrom(0).setSize(60).execute().actionGet();
5.简单查询
SearchResponse response = client.prepareSearch("index")
.setTypes("type")
.setSearchType(SearchType.DFS_QUERY_AND_FETCH)
.setQuery(QueryBuilders.termQuery("XXX", name)) // Query
.setPostFilter(QueryBuilders.termQuery("YYY", value))
.setFrom(0).setSize(60).setExplain(false).execute().actionGet();
6.关闭客户端
public void close() {
client.close();
}
分享到:
相关推荐
ElasticSearch学习笔记1 ElasticSearch是基于Lucene的搜索服务器,它提供了高性能的全文搜索功能,支持开箱即用的集群化扩展。ElasticSearch可以通过标准的REST API或特定于编程语言的客户端库与之交互。 一、什么...
Sleuth是一个分布式追踪解决方案,它为服务之间的调用提供日志跟踪,可与Zipkin或ELK(Elasticsearch、Logstash、Kibana)等工具配合,帮助分析请求在系统中的流转过程。 11. **Spring Cloud Stream消息驱动** ...
关于Elasticsearch的学习资料,官方提供了两个英文版文档,Elasticsearch Reference和Elasticsearch: the Definitive Guide。这两个文档虽然较为全面,但是阅读上可能有难度,尤其是在英语阅读能力有限的情况下。...
这篇学习笔记主要涵盖了JavaScript的基础语法和客户端JavaScript的相关知识。 1. **JavaScript基本语法**: - **变量声明**:未声明的变量尝试读取时会产生错误,而写入未声明的变量会创建一个全局变量。 - **...
学习笔记会涵盖JavaScript的基础语法、变量、数据类型、控制结构、函数、对象、数组、作用域、闭包、异步编程(Promise和async/await)等内容。同时,也会介绍ES6及以后版本的新特性,如箭头函数、模板字符串、解构...
这份学习笔记涵盖了Node.js的多个重要知识点,包括ES模块化、Express框架的基础、JSONP处理、Koa2框架、Mocha测试工具以及MySQL数据库的操作。让我们逐一深入探讨这些主题。 1. **ES模块化**:在Node.js中,ES模块...
这份“javascript学习笔记整理知识点整理”是针对初学者的一份宝贵资料,涵盖了JavaScript的基础知识,旨在帮助新手快速入门并掌握这门语言的核心概念。 一、变量与数据类型 在JavaScript中,变量用于存储数据。...
它在OpenGLES的基础上运行,后者是OpenGL的嵌入式版本,适用于移动设备和嵌入式系统。OpenGL的核心概念是它采用客户端-服务端模式,其中客户端是程序员编写的程序,而服务端是图形硬件,如GPU,负责处理复杂的图形...
在本"JavaScript学习笔记"中,我们将探讨JavaScript的核心概念、语法特性、DOM操作以及常见应用。 1. **基础语法** - 变量声明:JavaScript使用`var`、`let`和`const`进行变量声明,其中`let`和`const`是ES6新增的...
### JavaScript从入门到精通学习笔记 #### 一、JavaScript简介 **1.1 JavaScript是什么** JavaScript 是一种轻量级的编程语言,主要被用于客户端(浏览器端)的脚本语言,能够实现动态网页效果,增强用户体验。...
JavaScript与Java虽然名字相似,但两者是完全不同的语言,JavaScript主要是在客户端的浏览器上运行,而Java则是一种更通用的面向对象的编程语言。 JavaScript的核心特性包括: 1. **事件驱动**:JavaScript可以对...
14. **监控与日志**:利用ELK(Elasticsearch、Logstash、Kibana)堆栈或Prometheus+Grafana组合对应用性能进行监控和日志分析。 以上就是“Jave云笔记开发”项目可能涉及的主要知识点,每一个方面都需要开发者具备...
2. **JavaScript**:一种广泛应用于网页和网络应用的编程语言,用于实现客户端的动态效果和交互。JavaScript是前端开发的基础,用于处理DOM操作、数据交互、动画等。 3. **CSS**:层叠样式表,用于描述HTML或XML...
在本压缩包“第二阶段笔记笔记笔记笔记.zip”中,主要涵盖了JavaScript和Node.js的相关学习内容,结合了个人的理解和实践经验。以下是对这两个重要技术领域的详细解析。 **JavaScript:** JavaScript,简称JS,是...
### 韩顺平AJAX和jQuery笔记整理 #### AJAX概览 - **定义**:Asynchronous JavaScript and XML(异步JavaScript与XML),是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 - **运行原理**: - ...
我们可以了解到这些笔记详细讲解了多个关键知识点,包括JVM(Java虚拟机)、Java并发编程(JUC)、消息中间件ActiveMQ、数据库缓存系统Redis、微服务框架Spring Cloud、全文搜索引擎Elasticsearch、前端CSS3、Java...