添加maven依赖

 <dependency><groupId> org.elasticsearch</groupId ><artifactId> elasticsearch</artifactId ><version> 1.4.4</ version></dependency>
1、连接到es集群
1.1 通过启动内嵌集群节点
1.2 如果只想做单元测试,不想把节点加入集群,就要启动一个本地的es。它需要把节点的local参数设置为true
Node node = NodeBuilder.nodeBuilder().local(true).node();
1.3 通过 TransportClient这个接口,我们可以不启动节点就可以和es集群进行通信,它需要指定es集群中其中一台或多台机的ip地址和端口
Client client = new TransportClient()
.addTransportAddress(new InetSocketTransportAddress("host1", 9300))
.addTransportAddress(new InetSocketTransportAddress("host2", 9300));
如果需要使用其他名称的集群(默认是elasticsearch),需要如下设置

Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host1", 9300));
通过TransportClient这个接口,自动嗅探整个集群的状态,es会自动把集群中其它机器的ip地址加到客户端中
Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build();
TransportClient client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host1", 9300));
2、索引index(四种json,map,bean,es helpers)

IndexResponse response = client.prepareIndex("flxy", "emp", "1").setSource().execute().actionGet();
3、查询get
GetResponse response = client.prepareGet("flxy", "emp", "1").execute().actionGet();
参考文章:  http://www.yl1001.com/article/9931417337089175.htm
SearchType详解: es的搜索类型有4种
query and fetch(速度最快)(返回N倍数据量)
query then fetch(默认的搜索方式)
DFS query and fetch(可以更精确控制搜索打分和排名。)
DFS query then fetch
DFS解释:见备注
总结一下,从性能考虑QUERY_AND_FETCH是最快的,DFS_QUERY_THEN_FETCH是最慢的。从搜索的准确度来说,DFS要比非DFS的准确度更高。
ES查询详解:
查询:query
     .setQuery(QueryBuilders.matchQuery("name", "test"))
分页:from/size
     .setFrom(0).setSize(1)
排序:sort
     .addSort("age", SortOrder.DESC)
过滤:filter
     .setPostFilter(FilterBuilders.rangeFilter("age").from(1).to(19))
高亮:highlight

统计:facet(已废弃)使用aggregations 替代
     根据字段进行分组统计
     根据字段分组,统计其他字段的值

4、更新update(两种)
更新或者插入upsert
5、删除delete
DeleteResponse response = client.prepareDelete("crxy", "emp", "1").execute().actionGet();
9、总数count
long count = client.prepareCount("flxy").execute().get().getCount();
针对每种情况给出对应的测试代码
package elasticsearch;import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;import org.codehaus.jackson.map.ObjectMapper;
import org.elasticsearch.action.ActionFuture;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.count.CountRequestBuilder;
import org.elasticsearch.action.count.CountResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.action.update.UpdateRequestBuilder;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.cluster.node.DiscoveryNode;
import org.elasticsearch.common.collect.ImmutableList;
import org.elasticsearch.common.settings.ImmutableSettings;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.elasticsearch.search.highlight.HighlightField;
import org.elasticsearch.search.sort.SortOrder;
import org.junit.Before;
import org.junit.Test;/**
* 测试elasticsearch
*
* @author shenfl
*
*/
public class ESTest {// 客户端连接集群的示例对象private TransportClient client;//索引库private final String index="jf";//类型private final String type="ware_info";/*** 连接es*/@Beforepublic void init() {Properties properties = new Properties();properties.put("cluster.name", "elasticsearch");// 默认是指定集群名称,默认情况下集群名称elasticsearchproperties.put("client.transport.sniff", "true");// 自动嗅探整个集群的状态,es会自动把集群中其它机器的ip地址加到客户端中Settings settings = ImmutableSettings.settingsBuilder().put(properties).build();TransportAddress transportAddress = new InetSocketTransportAddress("192.168.2.20", 9300);// 设置集群IP和端口,多个通过逗号分割client = new TransportClient(settings).addTransportAddress(transportAddress);}/*** 连接es** @throws Exception*/@Testpublic void test1() throws Exception {GetResponse response = client.prepareGet("jf", "ware_info", "200").execute().actionGet();String sourceAsString = response.getSourceAsString();System.out.println(sourceAsString);}/*** 查询索引存储所有节点** @throws Exception*/@Testpublic void test2() throws Exception {ImmutableList<DiscoveryNode> connectedNodes = client.connectedNodes();for (DiscoveryNode discoveryNode : connectedNodes) {System.out.println(discoveryNode.getHostAddress());}}/*** index-json* @throws Exception*/@Testpublic void testIndexJson() throws Exception {String source = "{\"wareCode\":\"4001\",\"wareName\":\"90huafei\",\"kind\":\"huafei\"}";IndexRequestBuilder builder = client.prepareIndex(index, type, "401");builder.setSource(source);builder.execute();}/*** index-map* @throws Exception*/@Testpublic void testIndexMap() throws Exception {IndexRequest request = new IndexRequest(index,type,"400");Map<String,Object> source = new HashMap<String,Object>();source.put("id", 400);source.put("wareCode", "4000");source.put("wareName", "80huafei");source.put("kind", "huafei");request.source(source);client.index(request);}/*** index-bean* @throws Exception*/@Testpublic void testIndexBean() throws Exception {WareInfoBean bean = new WareInfoBean();bean.setId("402");bean.setWareCode("4002");bean.setWareName("90huafei");bean.setKind("huafei");IndexRequestBuilder builder = client.prepareIndex(index, type,bean.getId());builder.setSource(new ObjectMapper().writeValueAsString(bean));builder.execute();}/*** index-es helper* @throws Exception*/@Testpublic void testIndexEsHelper() throws Exception {XContentBuilder sourceBuilder = XContentFactory.jsonBuilder();sourceBuilder.startObject();sourceBuilder.field("id", "501");sourceBuilder.field("wareCode", "5001");sourceBuilder.field("wareName", "100huafei");sourceBuilder.field("kind", "huafei");sourceBuilder.endObject();IndexRequestBuilder builder = client.prepareIndex(index, type, "501");builder.setSource(sourceBuilder);builder.execute();}/*** update* @throws Exception*/@Testpublic void testUpate() throws Exception{UpdateRequestBuilder builder = client.prepareUpdate(index, type, "501");Map<String,Object> source = new HashMap<String,Object>();source.put("kind","huafei-update");builder.setDoc(source);builder.execute();}/*** delete ById* @throws Exception*/@Testpublic void testDeleteById() throws Exception{DeleteResponse response = client.prepareDelete(index, type, "501").execute().actionGet();System.out.println(response.getId());}/*** count* @throws Exception*/@Testpublic void testTotal() throws Exception{CountRequestBuilder builder = client.prepareCount(index);CountResponse response = builder.execute().get();long count = response.getCount();System.out.println("count:"+count);}/*** bulk* @throws Exception*/@Testpublic void testBulk() throws Exception{BulkRequest request = new BulkRequest();IndexRequest indexRequest = new IndexRequest(index,type,"600");Map<String,Object> source = new HashMap<String,Object>();source.put("id", "600");source.put("wareCode", "6000");source.put("wareName", "100huafei");source.put("kind", "huafei");request.add(indexRequest.source(source));ActionFuture<BulkResponse> bulk = client.bulk(request);BulkResponse response = bulk.get();if(response.hasFailures()){BulkItemResponse[] items = response.getItems();for (BulkItemResponse bulkItemResponse : items) {System.out.println(bulkItemResponse.getFailureMessage());}}}/*** get by id* @throws Exception*/@Testpublic void testIndexGetById() throws Exception {GetRequestBuilder builder = client.prepareGet(index,type,"501");GetResponse response = builder.execute().get();Map<String, Object> source = response.getSource();for (Map.Entry<String, Object> entry : source.entrySet()) {System.out.println(entry.getKey() + ":" + entry.getValue());}}/*** 关键字查询* @throws Exception*/@Testpublic void testGetByKeyWords() throws Exception {SearchRequestBuilder builder = client.prepareSearch(index);builder.setTypes(type);builder.setSearchType(SearchType.QUERY_THEN_FETCH);//搜索类型builder.setQuery(QueryBuilders.matchQuery("wareName","30liuliang"));// 设置查询条件builder.setPostFilter(FilterBuilders.rangeFilter("countValue").from(1000).to(5000));//设置过滤条件builder.addSort("countValue", SortOrder.ASC);//字段排序builder.addHighlightedField("wareName");//设置高亮字段builder.setHighlighterPreTags("<font red='colr'>");//设置高亮前缀builder.setHighlighterPostTags("</font>");//设置高亮后缀builder.setFrom(0);//pageNo 开始下标builder.setSize(2);//pageNum 共显示多少条SearchResponse response = builder.get();SearchHits hits = response.getHits();long total = hits.getTotalHits();//总数System.out.println("total:"+total);SearchHit[] hits2 = hits.getHits();for (SearchHit searchHit : hits2) {//获取高亮字段Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();HighlightField highlightField = highlightFields.get("wareName");Map<String, Object> source = searchHit.getSource();for (Map.Entry<String, Object>  entry: source.entrySet()) {String key = entry.getKey();String value = "";if("wareName".equals(key)){Text[] fragments = highlightField.getFragments();for (Text text : fragments) {value = text.toString();}}else {value = entry.getValue().toString();}System.out.println(key + "\t" + value);}String sourceAsString = searchHit.getSourceAsString();System.out.println(sourceAsString);}}/*** 分组统计 -等于与select kind ,count(1) from ware_info group by kind* @throws Exception*/@Testpublic void testCount() throws Exception{SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type);builder.addAggregation(AggregationBuilders.terms("count").field("kind"));SearchResponse reponse = builder.execute().get();Terms terms = reponse.getAggregations().get("count");List<Bucket> buckets = terms.getBuckets();for (Bucket bucket : buckets) {String r = bucket.getKey() + "->" + bucket.getDocCount();System.out.println(r);}}/*** 分组求和 -等于select kind ,sum(countValue) from ware_info group by kind* @throws Exception*/@Testpublic void testSum() throws Exception{SearchRequestBuilder builder = client.prepareSearch(index).setTypes(type);builder.addAggregation(AggregationBuilders.terms("term").field("kind").subAggregation(AggregationBuilders.sum("sum").field("countValue")));SearchResponse reponse = builder.execute().get();Terms terms = reponse.getAggregations().get("term");List<Bucket> buckets = terms.getBuckets();for (Bucket bucket : buckets) {Sum sum = bucket.getAggregations().get("sum");String r = bucket.getKey() + "->" + sum.getValue();System.out.println(r);}}}

ES006-Elasticsearch-JAVA客户端相关推荐

  1. 干货 | Elasticsearch Java 客户端演进历史和选型指南

    1.Elasticsearch java 客户端为什么要选型? Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于: Transport 客户端 Java REST 客户 ...

  2. 【Elasticsearch】官方Elasticsearch Java客户端的状态

    1.概述 翻译:State of the official Elasticsearch Java clients Java程序员在与Elasticsearch通信时有两种选择:他们可以使用HTTP上的 ...

  3. java 初始化应用程序失败,Elasticsearch Java客户端初始化失败

    我在尝试运行连接到Elasticsearch的应用程序时收到此错误消息. An attempt was made to call the method org.elasticsearch.client ...

  4. Elasticsearch java客户端调用cat服务

    开发环境,测试环境,预发环境和生产环境一般相互隔离的,使用开发环境或者测试环境可以使用cat来查看索引的情况 例如: 但预防环境和测试环境是不允许访问的,那怎么办呢? 可以使用后台来查看上述信息,提供 ...

  5. Elasticsearch: java客户端之AdminClient

    Elasticsearch版本 elasticsearch-5.4.3.jar 指定 ip地址创建client private TransportClient client = null;/***指定 ...

  6. 来聊一聊 ElasticSearch 最新版的 Java 客户端

    可能不少小伙伴都注意到了,从 ElasticSearch7.17 这个版本开始,原先的 Java 高级客户端 Java High Level REST Client 废弃了,不支持了.老实说,Elas ...

  7. 用于Elasticsearch成绩单的Java客户端

    在本演讲中,我将介绍用于Elasticsearch和Spring Data Elasticsearch的三个不同的客户端. 首先,让我们看一下Elasticsearch的一些基础知识. 弹性搜索 为了 ...

  8. 【Elasticsearch】java 客户端 获取 termvectors 词频 统计

    1.概述 2.获取单条index的词频 elasticsearch的termvectors包括了term的位置.词频等信息.这些信息用于相应的数据统计或开发其他功能,本文介绍termvecters如何 ...

  9. Elasticsearch:在 Java 客户端中使用 scroll 来遍历搜索结果 - Elastic Stack 8.x

    如果你搜索不经常更改的文档,则使用标准查询的分页效果非常好: 否则,使用实时数据执行分页会返回不可预测的结果. 为了绕过这个问题,Elasticsearch 在查询中提供了一个额外的参数:scroll ...

  10. ElasticSearch集群安装及Java客户端使用

    ElasticSearch集群安装及Java客户端使用 1.传统模式安装 1.1 ElasticSearch安装 下载Es安装包 ElasticSearch的官方地址:https://www.elas ...

最新文章

  1. 深度学习 VS 传统计算机视觉
  2. 保证高可用Java服务化系统高效运行的必备工具箱
  3. 九度OJ-1042-最长公共子序列(LCS)
  4. 我们距离AI编程还有多远?
  5. Vue.js 从 Vue Router 0.7.x 迁移
  6. HDU 5612 Baby Ming and Matrix games
  7. python 将元组解析为多个参数
  8. java实体类如果不重写toString方法,会如何?
  9. 中台不火,天理难容!
  10. KDD Cup2020 正式开赛,天池诚邀各路豪杰来挑战!!
  11. Redis-Bitmap介绍及使用
  12. Qt创建多线程的两种方法
  13. tomcat web服务器优化
  14. 安徽2022农民丰收节 国稻种芯:郑栅洁启动舒城主场活动仪式
  15. 最全事业单位考试计算机基础知识试题,最全的事业单位考试计算机基础知识试题...
  16. Java基础逻辑面试题
  17. matlab线性拟合
  18. java库存同步思路_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
  19. 层次、网状、关系模型
  20. BZOJ 1127: [POI2008]KUP 最大子矩阵

热门文章

  1. centOS7系统虚拟机节点的搭建
  2. 一键网络重装系统 - 魔改版(适用于Linux / Windows)
  3. mysql connectionstrings_「connectionstrings」C#连接数据库时Appsettings 与connectionStrings的区别 - seo实验室...
  4. 微信小程序之找回密码
  5. 个人微信管理工具有哪些功能
  6. 关于集成学习的总结(一) 投票法
  7. 重启Nginx,重启redis--记录
  8. 24,、135条综合布线系统专业术语,弱电人必备的知识
  9. ubuntu autojump安装及基本使用autojump常用命令
  10. ubuntu添加环境变量