ElasticSearch搜索引擎java客户端接口详解
来源:互联网 发布:ubuntu怎么看硬盘大小 编辑:程序博客网 时间:2024/05/01 08:28
官方文档详见:http://www.elasticsearch.org/guide/en/elasticsearch/client/java-api/current/
本次测试使用Maven坐标如下:
<!--elasticsearch及其依赖包--><dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>2.2.1</version></dependency><!--Google的json转换插件gson--><dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.3</version></dependency>
一、获取与关闭客户端方式:这里只用一种,另一种详见官网
public static void main(String[] args) throws UnknownHostException { // on startup Client client = TransportClient.builder().build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("192.168.200.129"), 9300)); // on shutdown client.close(); }
二、创建索引方式:
(1)第一种方式:
//此处可以使用jackson包下ObjectMapper解析,本次使用gson public static void indexCreate(Client client ) { Map<String,Object> map = Maps.newHashMap(); map.put("title", "今晚打老虎"); map.put("body", "号称是赌圣的存在,1937年某一天今晚打老虎"); map.put("publish", "2016-12-5"); String s = new Gson().toJson(map);// IndexResponse res = null; /*第一个参数索引名称,第二个参数类型名称,与关系型数据库对应大致为:索引相当于数据库名,类型相当于表名*/ res = client.prepareIndex("chupengfei","xiaofei").setSource(s).execute().actionGet(); System.out.println(res); //------------------------------------------------------------------ // 索引名称 String _index = res.getIndex(); System.out.println("_index: "+_index); // 类型名称 String _type = res.getType(); System.out.println("_type: "+_type); // 文档id String _id = res.getId(); System.out.println("_id: "+_id); // 版本(if it's the first time you index this document, you will get: 1) long _version = res.getVersion(); System.out.println("_version: "+_version); // 是否被创建is true if the document is a new one, false if it has been updated boolean created = res.isCreated(); System.out.println("created: "+created); // on shutdown client.close(); }
(2)第二种方式:
//Elasticsearch提供内置的助手生成JSON内容 public static void indexCreate(Client client ) { String jsonSource = ""; try { XContentBuilder contentBuilder = XContentFactory.jsonBuilder() .startObject(); contentBuilder.field("title", "今晚打老虎"); contentBuilder.field("body", "号称是赌圣的存在,1937年某一天今晚打老虎"); contentBuilder.field("publish", "2016-12-5"); jsonSource = contentBuilder.endObject().string(); } catch (IOException e) { e.printStackTrace(); } IndexResponse res = null; res = client.prepareIndex("chupengfei","xiaofei").setSource(jsonSource ).execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
三、获取索引方式:
public static void indexGet(Client client ) { SearchResponse res = null; res = client.prepareSearch("chupengfei").setTypes("xiaofei").get(); System.out.println(res); // on shutdown client.close(); }
四、删除索引方式:
public static void indexDelete(Client client, String id ) { DeleteResponse res = null; res = client.prepareDelete("api_test","type_test", id).execute().actionGet(); System.out.println(res.isFound()); // on shutdown client.close(); }
五、更新索引方式:
public static void update(Client client ) throws IOException, InterruptedException, ExecutionException { UpdateRequest req = new UpdateRequest(); req.index("search_test"); req.type("article"); req.id("5"); req.doc(jsonBuilder().startObject().field("title", "褚鹏飞222").field("body", "阳光大男孩").endObject()); client.update(req).get(); client.close(); }
六、批量更新索引方式:
public static void bulkUpdate(Client client ) throws IOException, InterruptedException, ExecutionException { BulkRequestBuilder req = client.prepareBulk(); req.add(client.prepareIndex("search_test","article","2") .setSource(jsonBuilder() .startObject() .field("title","bulk title 02 04-05"))); req.add(client.prepareIndex("search_test","article","3") .setSource(jsonBuilder() .startObject() .field("title","bulk title 03 04-05"))); req.add(client.prepareIndex("search_test","article","4") .setSource(jsonBuilder() .startObject() .field("title","bulk title 04 04-05"))); BulkResponse res = req.execute().actionGet(); if (res.hasFailures()){ System.out.println("Error"); } else { System.out.println("Done"); } client.close(); }
七、使用java api 实现简单查询:
(1)方式一:
public static void matchAllQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders.matchAllQuery(); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()){ System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
(2)方式二:
public static void matchQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders.matchQuery("title", "bulk"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()){ System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
(3)方式三:
public static void multiMatchQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders .multiMatchQuery("article","title", "body"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
(4)方式四:
public static void commonTermQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders .commonTermsQuery("title","article"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); //common terms query }
(5)方式五:
public static void termQuery(Client client ) { SearchResponse res = null; /*QueryBuilder qb = QueryBuilders .termQuery("title","bulk");*/ QueryBuilder qb = QueryBuilders .termsQuery("title","bulk"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .addHighlightedField("title") .setHighlighterPreTags("<span class='searchKey'>") .setHighlighterPostTags("</san>") .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits()) { Map<String, HighlightField> result = hit.highlightFields(); HighlightField highlightedSummary = result.get("title"); Text[] titleTexts = highlightedSummary.getFragments(); String allFragments = ""; for (Text text: titleTexts){ allFragments += text; } System.out.println(result); System.out.println(allFragments); } // on shutdown client.close(); //common terms query }
(6)方式六:
public static void rangeQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders .rangeQuery("like") .gte(5) .lt(7);// QueryBuilder qb = QueryBuilders// .rangeQuery("like")// .from(5)// .to(7)// .includeLower(true)// .includeUpper(false); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); //common terms query }
(7)方式七:
public static void othersQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders.existsQuery("str"); //QueryBuilder qb = QueryBuilders.prefixQuery("name", "prefix"); //QueryBuilder qb = QueryBuilders.wildcardQuery("user", "k?mc*"); //QueryBuilder qb = QueryBuilders.regexpQuery("user", "k.*y"); //QueryBuilder qb = QueryBuilders.fuzzyQuery("name", "kimzhy"); //QueryBuilder qb = QueryBuilders.typeQuery("my_type"); //QueryBuilder qb = QueryBuilders.idsQuery("my_type","type2").addIds("1","2","5"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); //common terms query }
八、使用java api 实现复合查询:
(1)方式一:
public static void constantScoreQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders .constantScoreQuery(QueryBuilders.termQuery("title","article")) .boost(2.0f); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
(2)方式二:
public static void booQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders.boolQuery() .must(QueryBuilders.termQuery("title","article")) .mustNot(QueryBuilders.termQuery("title","relevance")) .should(QueryBuilders.termQuery("title","article")) .filter(QueryBuilders.termQuery("title","article")); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()){ System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
(3)方式三:
public static void disMaxQuery(Client client ) { SearchResponse res = null; QueryBuilder qb = QueryBuilders .disMaxQuery() .add(QueryBuilders.termQuery("title","article")) .add(QueryBuilders.termQuery("title","relevance")).boost(1.2f).tieBreaker(0.7f); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(qb) .setFrom(0) .setSize(10) .execute().actionGet(); for (SearchHit hit: res.getHits().getHits()) { System.out.println(hit.getSourceAsString()); } // on shutdown client.close(); }
九、使用java api 实现聚合查询:
(1)方式一:
public static void avgQuery(Client client ) { SearchResponse res = null; AvgBuilder agg = AggregationBuilders .avg("avg_num") .field("like"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(2)方式二:
public static void minQuery(Client client ) { SearchResponse res = null; MinBuilder agg = AggregationBuilders .min("min_num") .field("like"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(3)方式三:
public static void maxQuery(Client client ) { SearchResponse res = null; MaxBuilder agg = AggregationBuilders .max("max_num") .field("like"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(4)方式四:
public static void extendedStatsQuery(Client client ) { SearchResponse res = null; ExtendedStatsBuilder agg = AggregationBuilders .extendedStats("extended_stats_num") .field("like"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(5)方式五:
@SuppressWarnings("rawtypes") public static void valueCountQuery(Client client ) { SearchResponse res = null; MetricsAggregationBuilder agg = AggregationBuilders .count("agg") .field("like"); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(6)方式六:
public static void percentileQuery(Client client ) { SearchResponse res = null; PercentilesBuilder agg = AggregationBuilders .percentiles("percentile_num") .field("like") .percentiles(95,99,99.9); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(7)方式七:
public static void percentileRankQuery(Client client ) { SearchResponse res = null; PercentileRanksBuilder agg = AggregationBuilders .percentileRanks("percentile_rank_num") .field("like") .percentiles(3,5); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(10) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(8)方式八:
@SuppressWarnings("rawtypes") public static void rangeQuery(Client client ) { SearchResponse res = null; AggregationBuilder agg = AggregationBuilders .range("agg") .field("like") .addUnboundedTo(3) .addRange(3, 5) .addUnboundedFrom(5); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(0) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(9)方式九:
@SuppressWarnings("rawtypes") public static void histogramQuery(Client client ) { SearchResponse res = null; AggregationBuilder agg = AggregationBuilders .histogram("agg") .field("like") .interval(2); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(0) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
(10)方式十:
@SuppressWarnings("rawtypes") public static void dateHistogramQuery(Client client ) { SearchResponse res = null; AggregationBuilder agg = AggregationBuilders .dateHistogram("agg") .field("publish_date") .interval(DateHistogramInterval.YEAR) .minDocCount(1); res = client.prepareSearch("search_test") .setTypes("article") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .addAggregation(agg) .setFrom(0) .setSize(0) .execute().actionGet(); System.out.println(res); // on shutdown client.close(); }
阅读全文
1 0
- ElasticSearch搜索引擎java客户端接口详解
- ElasticSearch java客户端使用
- ES006-Elasticsearch-JAVA客户端
- elasticsearch java客户端 - Jest
- Elasticsearch系列(五)----JAVA客户端之TransportClient操作详解
- Elasticsearch系列(六)----JAVA客户端之Jest操作详解
- Elasticsearch系列(七)----JAVA客户端之RestClient操作详解
- TFS客户端接口详解JAVA版本
- ElasticSearch中Cat接口详解
- ElasticSearch 搜索引擎
- Elasticsearch搜索引擎
- Elasticsearch搜索引擎
- 搜索引擎–elasticsearch python客户端pyes 建立索引和搜索
- elasticsearch RESTful搜索引擎-(java jest 使用[入门])
- elasticsearch RESTful搜索引擎-(java jest 使用[入门])
- elasticsearch客户端java包选型
- elasticsearch java客户端 - 原生esClient
- 使用java客户端操作elasticsearch
- Spring Bean xml显式装配之构造函数
- python 字典用法
- SecureCRT安装
- Python中if __name__ == "__main__": 的作用
- 通过style实现从屏幕底下弹出dialog动画效果
- ElasticSearch搜索引擎java客户端接口详解
- Notepad++配色
- C语言const:禁止修改变量的值
- 使用python进行数据分析介绍及部分教程
- Android 磁场传感器 地磁倾角计算 SensorManager.getInclination方法
- 为什么canvas绘制的线条会模糊、有锯齿?
- hdoj 1686 Oulipo
- 软件光栅化渲染器(九)
- Windows上部署Jenkins遇到的问题