Elasticsearch查询API的两种实现
发布时间:2019-01-15
1.引入pom文件
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.4.5</version>
</dependency>
此处用了2.4.5的版本
2.输入一个值在多个字段里面匹配
比如:表里面有三个字段 姓名name,地址address,备注remark,那么我输入一个值只要任何一个字段匹配即可
String esClusterName = "bigdata";
String esNodes = "172.16.7.14";
int esPort = 9306;
Settings settings = Settings.settingsBuilder().put("cluster.name", esClusterName) // 设置集群名
.put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证, 打开后集群名字不对也能连接上
.build();
TransportClient client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(esNodes, esPort)));
//构建查询Builder
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("userinfo").setTypes("type");
//查询条件
String queryString = "石头";
QueryStringQueryBuilder qsBuilder = QueryBuilders.queryStringQuery(queryString);
qsBuilder.field("name").field("address").field("remark");// name,address,remark中只要有一个符合均合条件
BoolQueryBuilder searchBuilder = QueryBuilders.boolQuery();
searchBuilder.filter(qsBuilder);
searchRequestBuilder.setQuery(searchBuilder);
//执行查询
SearchResponse response = searchRequestBuilder.execute().actionGet();
//输出结果
SearchHits hits = response.getHits();
for (SearchHit hit : hits.getHits()) {
System.out.println(hit.sourceAsMap());
}
client.close();
3.每个字段各自匹配
比如:表里面有三个字段 姓名name,地址address,备注remark
需要找 name为张三,address是南山 remark为外国人
String esClusterName = "bigdata";
String esNodes = "172.16.7.14";
int esPort = 9306;
Settings settings = Settings.settingsBuilder().put("cluster.name", esClusterName) // 设置集群名
.put("client.transport.ignore_cluster_name", true) // 忽略集群名字验证, 打开后集群名字不对也能连接上
.build();
TransportClient client = TransportClient.builder().settings(settings).build()
.addTransportAddress(new InetSocketTransportAddress(new InetSocketAddress(esNodes, esPort)));
//构建查询Builder
SearchRequestBuilder searchRequestBuilder = client.prepareSearch("info_case").setTypes("type");
//查询:每个字段给不同的值,三个查询条件
QueryBuilder builder = QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("name", "张三")));
QueryBuilder builder1 = QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("address", "南山")));
QueryBuilder builder2 = QueryBuilders.boolQuery().should(QueryBuilders.boolQuery().filter(QueryBuilders.termQuery("remark", "外国人")));
searchRequestBuilder.setQuery(builder).setQuery(builder1).setQuery(builder2);
//排序
SortBuilder sortBuilder = SortBuilders.fieldSort("CREATETIME").order(SortOrder.DESC);
searchRequestBuilder.addSort(sortBuilder);
//开始查询
SearchResponse response = searchRequestBuilder.execute().actionGet();
SearchHits hits = response.getHits();
for (SearchHit hit : hits.getHits()) {
System.out.println(hit.sourceAsMap());
}
热门文章
nginx+php 开启PHP错误日志
行业早报2019-01-15为什么你说了很多遍,对方还是不听? 2018-09-25
行业早报2019-01-15【Ruby on Rails实战】3.1 宠物之家论坛管理系统介绍
行业早报2019-01-15从凡人到筑基期的单片机学习之路
行业早报2019-01-15jmeter单台大数量并发
行业早报2019-01-15Go在Windows下开发环境搭建
行业早报2019-01-15ES-科普知识篇
行业早报2019-01-15Hbase 之 由 Zookeeper Session Expired 引发的 HBASE 思考
行业早报2019-01-15谷歌大脑专家详解:深度学习可以促成哪些产品突破?
行业早报2019-01-15EventLoop
行业早报2019-01-15
相关推荐