ES006-Elasticsearch-JAVA客户端
添加maven依赖
<dependency><groupId> org.elasticsearch</groupId ><artifactId> elasticsearch</artifactId ><version> 1.4.4</ version></dependency>
1.1 通过启动内嵌集群节点
1.2 如果只想做单元测试,不想把节点加入集群,就要启动一个本地的es。它需要把节点的local参数设置为true
Node node = NodeBuilder.nodeBuilder().local(true).node();
Client client = new TransportClient()
.addTransportAddress(new InetSocketTransportAddress("host1", 9300))
.addTransportAddress(new InetSocketTransportAddress("host2", 9300));
Settings settings = ImmutableSettings.settingsBuilder().put("cluster.name", "myClusterName").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host1", 9300));
Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.sniff", true).build();
TransportClient client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host1", 9300));
IndexResponse response = client.prepareIndex("flxy", "emp", "1").setSource().execute().actionGet();
GetResponse response = client.prepareGet("flxy", "emp", "1").execute().actionGet();
![](/assets/blank.gif)
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的准确度更高。
.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 替代
根据字段进行分组统计
根据字段分组,统计其他字段的值
更新或者插入upsert
DeleteResponse response = client.prepareDelete("crxy", "emp", "1").execute().actionGet();
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客户端相关推荐
- 干货 | Elasticsearch Java 客户端演进历史和选型指南
1.Elasticsearch java 客户端为什么要选型? Elasticsearch 官方提供了很多版本的 Java 客户端,包含但不限于: Transport 客户端 Java REST 客户 ...
- 【Elasticsearch】官方Elasticsearch Java客户端的状态
1.概述 翻译:State of the official Elasticsearch Java clients Java程序员在与Elasticsearch通信时有两种选择:他们可以使用HTTP上的 ...
- java 初始化应用程序失败,Elasticsearch Java客户端初始化失败
我在尝试运行连接到Elasticsearch的应用程序时收到此错误消息. An attempt was made to call the method org.elasticsearch.client ...
- Elasticsearch java客户端调用cat服务
开发环境,测试环境,预发环境和生产环境一般相互隔离的,使用开发环境或者测试环境可以使用cat来查看索引的情况 例如: 但预防环境和测试环境是不允许访问的,那怎么办呢? 可以使用后台来查看上述信息,提供 ...
- Elasticsearch: java客户端之AdminClient
Elasticsearch版本 elasticsearch-5.4.3.jar 指定 ip地址创建client private TransportClient client = null;/***指定 ...
- 来聊一聊 ElasticSearch 最新版的 Java 客户端
可能不少小伙伴都注意到了,从 ElasticSearch7.17 这个版本开始,原先的 Java 高级客户端 Java High Level REST Client 废弃了,不支持了.老实说,Elas ...
- 用于Elasticsearch成绩单的Java客户端
在本演讲中,我将介绍用于Elasticsearch和Spring Data Elasticsearch的三个不同的客户端. 首先,让我们看一下Elasticsearch的一些基础知识. 弹性搜索 为了 ...
- 【Elasticsearch】java 客户端 获取 termvectors 词频 统计
1.概述 2.获取单条index的词频 elasticsearch的termvectors包括了term的位置.词频等信息.这些信息用于相应的数据统计或开发其他功能,本文介绍termvecters如何 ...
- Elasticsearch:在 Java 客户端中使用 scroll 来遍历搜索结果 - Elastic Stack 8.x
如果你搜索不经常更改的文档,则使用标准查询的分页效果非常好: 否则,使用实时数据执行分页会返回不可预测的结果. 为了绕过这个问题,Elasticsearch 在查询中提供了一个额外的参数:scroll ...
- ElasticSearch集群安装及Java客户端使用
ElasticSearch集群安装及Java客户端使用 1.传统模式安装 1.1 ElasticSearch安装 下载Es安装包 ElasticSearch的官方地址:https://www.elas ...
最新文章
- 深度学习 VS 传统计算机视觉
- 保证高可用Java服务化系统高效运行的必备工具箱
- 九度OJ-1042-最长公共子序列(LCS)
- 我们距离AI编程还有多远?
- Vue.js 从 Vue Router 0.7.x 迁移
- HDU 5612 Baby Ming and Matrix games
- python 将元组解析为多个参数
- java实体类如果不重写toString方法,会如何?
- 中台不火,天理难容!
- KDD Cup2020 正式开赛,天池诚邀各路豪杰来挑战!!
- Redis-Bitmap介绍及使用
- Qt创建多线程的两种方法
- tomcat web服务器优化
- 安徽2022农民丰收节 国稻种芯:郑栅洁启动舒城主场活动仪式
- 最全事业单位考试计算机基础知识试题,最全的事业单位考试计算机基础知识试题...
- Java基础逻辑面试题
- matlab线性拟合
- java库存同步思路_这个是真的厉害,高并发场景下的订单和库存处理方案,讲的很详细了!...
- 层次、网状、关系模型
- BZOJ 1127: [POI2008]KUP 最大子矩阵
热门文章
- centOS7系统虚拟机节点的搭建
- 一键网络重装系统 - 魔改版(适用于Linux / Windows)
- mysql connectionstrings_「connectionstrings」C#连接数据库时Appsettings 与connectionStrings的区别 - seo实验室...
- 微信小程序之找回密码
- 个人微信管理工具有哪些功能
- 关于集成学习的总结(一) 投票法
- 重启Nginx,重启redis--记录
- 24,、135条综合布线系统专业术语,弱电人必备的知识
- ubuntu autojump安装及基本使用autojump常用命令
- ubuntu添加环境变量