原文链接:http://blog.csdn.net/changong28/article/details/38445805#comments
在原文基础上针对2.3.1版本稍微修改了一下
3.3.1 Preparing a query 准备查询请求
import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.Client; import org.elasticsearch.search.SearchHit; SearchResponse response = client.prepareSearch("library") .addFields("title", "_source") .execute().actionGet(); for(SearchHit hit: response.getHits().getHits()) { System.out.println(hit.getId()); if (hit.getFields().containsKey("title")) { System.out.println("field.title: "+ hit.getFields().get("title").getValue()); } System.out.println("source.title: " + hit.getSource().get("title")); }
3.3.2 Building queries 构造查询
import org.elasticsearch.index.query.QueryBuilder; import org.elasticsearch.index.query.QueryBuilders;
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(QueryBuilders.termQuery("sid_s", text));
Search search = new Search.Builder(searchSourceBuilder.toString()).addIndex("webpage")
.build();
try {
SearchResult result = client.execute(search);
}catch(Exception e){
e.printStackTrace();
}
3.3.3 Using the match all documents query 匹配所有文档的查询
queryBuilder = QueryBuilders.matchAllQuery() .boost(11f).normsField("title");
3.3.4 The match query 匹配查询
queryBuilder = QueryBuilders .matchQuery("message", "a quick brown fox") .operator(Operator.AND) .zeroTermsQuery(ZeroTermsQuery.ALL);
3.3.5 Using the geo shape query 地理位置查询
queryBuilder = QueryBuilders.geoShapeQuery("location", ShapeBuilder.newRectangle() .topLeft(13, 53) .bottomRight(14, 52) .build());
3.3.6 Paging query 分页查询
SearchResponse response = client.prepareSearch("library") .setQuery(QueryBuilders.matchAllQuery()) .setFrom(10) //跳过前10个文档 .setSize(20) //获取20个文档 .execute().actionGet();
response.getHits().totalHits()可以统计当前匹配到的结果数
3.3.7 Sorting 排序
searchSourceBuilder.fetchSource(null, "content").sort("_score");
searchSourceBuilder.sort("date", SortOrder.DESC);
SortBuilders.scriptSort(script, type) //使用脚本来实现排序
SortBuilders.geoDistanceSort(fieldName) //根据空间距离来进行排序
提到距离问题,附带一篇博文:关于已知两点经纬度求球面最短距离的公式推导
3.3.8 Filtering 过滤
QueryBuilder filterBuilder = QueryBuilders .filteredQuery( QueryBuilders.existsQuery("title").queryName("exist"), QueryBuilders.termQuery("title", "elastic") ); SearchResponse response = client.prepareSearch("library") .setPostFilter(filterBuilder) .execute().actionGet();
3.3.10 Highlighting 高亮
SearchResponse response = client.prepareSearch("wikipedia") .addHighlightedField("title") .setQuery(QueryBuilders.termQuery("title", "actress")) .setHighlighterPreTags("<1>", "<2>") .setHighlighterPostTags("</1>", "</2>") .execute().actionGet(); for(SearchHit hit: response.getHits().getHits()) { HighlightField hField = hit.getHighlightFields().get("title"); for (Text t : hField.fragments()) { System.out.println(t.string()); } }
3.3.11 Suggestions 查询建议
SearchResponse response = client.prepareSearch("wikipedia") .setQuery(QueryBuilders.matchAllQuery()) .addSuggestion(new TermSuggestionBuilder("first_suggestion") .text("graphics designer") .field("_all")) .execute().actionGet(); for( Entry<? extends Option> entry : response.getSuggest().getSuggestion("first_suggestion").getEntries()) { System.out.println("Check for: " + entry.getText() + ". Options:"); for( Option option : entry.getOptions()) { System.out.println("\t" + option.getText()); } }
3.3.12 Counting 统计
CountResponse response = client.prepareCount("library") .setQuery(QueryBuilders.termQuery("title", "elastic")) .execute().actionGet();
3.3.13 Scrolling 滚动
SearchResponse responseSearch = client.prepareSearch("library") .setScroll("1m") .setSearchType(SearchType.SCAN) .execute().actionGet(); String scrollId = responseSearch.getScrollId(); SearchResponse response = client.prepareSearchScroll(scrollId).execute().actionGet();
3.3.14 Bulk 批量操作
BulkResponse response = client.prepareBulk() .add(client.prepareIndex("library", "book", "5") .setSource("{ \"title\" : \"Solr Cookbook\"}") .request()) .add(client.prepareDelete("library", "book", "2").request()).execute().actionGet();
3.3.16 Multi GET 多GET
MultiGetResponse response = client.prepareMultiGet() .add("library", "book", "1", "2") .execute().actionGet();
3.3.16 Multi Search 多搜索
MultiSearchResponse response = client.prepareMultiSearch() .add(client.prepareSearch("library", "book").request()) .add(client.prepareSearch("news"). .setPostFilter(QueryBuilders.termQuery("tags", "important"))) .execute().actionGet();
3.3.17 Building JSON queries and documents 构造JSON格式的查询和文档
IndexResponse response = client .prepareIndex("library", "book", "2") .setSource("{ \"title\": \"Mastering ElasticSearch\"}") .execute().actionGet(); Map<String, Object> m = Maps.newHashMap(); m.put("1", "Introduction"); m.put("2", "Basics"); m.put("3", "And the rest"); XContentBuilder json = XContentFactory.jsonBuilder().prettyPrint() .startObject() .field("id").value("2123") .field("lastCommentTime", new Date()) .nullField("published") .field("chapters").map(m) .field("title", "Mastering ElasticSearch") .array("tags", "search", "ElasticSearch", "nosql") .field("values") .startArray() .value(1) .value(10) .endArray() .endObject();
3.4 The administration API
3.4.1.1 The cluster and indices health API 集群和索引健康状态
ClusterHealthResponse response = client.admin().cluster() .prepareHealth("library") .execute().actionGet();
3.4.1.2 The cluster state API 集群状态
ClusterStateResponse response = client.admin().cluster() .prepareState() .execute().actionGet();
3.4.1.3 The update settings API 设置更新
Map<String, Object> map = Maps.newHashMap(); map.put("indices.ttl.interval", "10m"); ClusterUpdateSettingsResponse response = client.admin().cluster() .prepareUpdateSettings() .setTransientSettings(map) .execute().actionGet();
3.4.1.4 The reroute API 重新路由
ClusterRerouteResponse response = client.admin().cluster() .prepareReroute() .setDryRun(true) //阻止分配命令的运行,仅允许下面两个给定命令(move命令 + cacel命令)的执行 .add(new MoveAllocationCommand(new ShardId("library", 3), "G3czOt4HQbKZT1RhpPCULw","PvHtEMuRSJ6rLJ27AW3U6w"), new CancelAllocationCommand(new ShardId("library", 2), "G3czOt4HQbKZT1RhpPCULw",true)) .execute().actionGet();
3.4.1.5 The nodes information API 节点信息
NodesInfoResponse response = client.admin().cluster() .prepareNodesInfo() .setHttp(true) //响应中包括http信息 .setPlugins(true) //响应中包括插件信息 .execute().actionGet();
3.4.1.6 The node statistics API 节点统计
NodesStatsResponse response = client.admin().cluster() .prepareNodesStats() .all() .execute().actionGet();
3.4.1.7 The nodes hot threads API 节点热点线程
NodesHotThreadsResponse response = client.admin().cluster() .prepareNodesHotThreads() .execute().actionGet();
3.4.1.9 The search shards API 查询分片
//输出哪些节点将处理路由值为12的查询 ClusterSearchShardsResponse response = client.admin().cluster() .prepareSearchShards() .setIndices("library") .setRouting("12") .execute().actionGet();
3.4.2 The Indices administration API
3.4.2.1 The index existence API 索引存在
IndicesExistsResponse response = client.admin().indices() .prepareExists("books", "library") .execute().actionGet();
3.4.2.2 The Type existence API 类型存在
TypesExistsResponse response = client.admin().indices() .prepareTypesExists("library") .setTypes("book") .execute().actionGet();
3.4.2.3 The indices stats API 索引统计
IndicesStatsResponse response = client.admin().indices() .prepareStats("library") .all() .execute().actionGet();
3.4.2.4 Index status 索引状态
IndicesStatsResponse response = client.admin().indices() .prepareStatus("library") .setRecovery(true) .execute().actionGet();
3.4.2.5 Segments information API 索引段信息
IndicesSegmentResponse response = client.admin().indices() .prepareSegments("library") .execute().actionGet();
3.4.2.6 Creating an index API 创建索引
CreateIndexResponse response = client.admin().indices() .prepareCreate("news") .setSettings(Settings.settingsBuilder() .put("number_of_shards", 1)) //分片数为1 .addMapping("news", XContentFactory.jsonBuilder() .startObject() .startObject("news") .startObject("properties") .startObject("title") .field("analyzer", "whitespace") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.7 Deleting an index 删除索引
DeleteIndexResponse response = client.admin().indices() .prepareDelete("news") .execute().actionGet();
3.4.2.8 Closing an index 关闭索引
CloseIndexResponse response = client.admin().indices() .prepareClose("library") .execute().actionGet();
3.4.2.9 Opening an index 打开索引
OpenIndexResponse response = client.admin().indices() .prepareOpen("library") .execute().actionGet();
3.4.2.10 The Refresh API 刷新索引
RefreshResponse response = client.admin().indices() .prepareRefresh("library") .execute().actionGet();
3.4.2.11 The Flush API 清空缓冲区
FlushResponse response = client.admin().indices() .prepareFlush("library") .setFource(false) .execute().actionGet();
3.4.2.12 The Optimize API 索引优化
OptimizeResponse response = client.admin().indices() .prepareOptimize("library") .setMaxNumSegments(2) //最大索引段为2 .setFlush(true) .setOnlyExpungeDeletes(false) .execute().actionGet();
3.4.2.13 The put mapping API 设置映射
PutMappingResponse response = client.admin().indices() .preparePutMapping("news") .setType("news") .setSource(XContentFactory.jsonBuilder() .startObject() .startObject("news") .startObject("properties") .startObject("title") .field("analyzer", "whitespace") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.16 The aliases API 别名
IndicesAliasesResponse response = client.admin().indices() .prepareAliases() .addAlias("news", "n") .addAlias("library", "elastic_books", QueryBuilders.termQuery("title", "elasticsearch")) .removeAlias("news", "current_news") //移除news索引的别名current_news .execute().actionGet();
3.4.2.17 The get aliases API 获取别名
GetAliasesResponse response = client.admin().indices() .prepareGetAliases("elastic_books", "n") .execute().actionGet();
3.4.2.18 The aliases exists API 别名存在
AliasesExistResponse response = client.admin().indices() .prepareAliasesExist("elastic*", "unknown") //以elastic开头 || 为unknown 的别名 .execute().actionGet();
3.4.2.19 The clear cache API 清空缓存
ClearIndicesCacheResponse response = client.admin().indices() .prepareClearCache("library") .setFieldDataCache(true) .setFields("title") //清空标题缓存 .setQueryCache(true) //清空过滤器缓存 .execute().actionGet();
3.4.2.20 The update settings API 更新设置
UpdateSettingsResponse response = client.admin().indices() .prepareUpdateSettings("library") .setSettings(Settings.builder() .put("index.number_of_replicas", 2)) //将副本数更新为2 .execute().actionGet();
3.4.2.21 The analyze API 分析API
//主要是用来检查在library索引中使用whitespace分词器 + nGram过滤器处理“ElasticSerch Servers”短语的分析处理 AnalyzeResponse response = client.admin().indices() .prepareAnalyze("library", "ElasticSearch Servers") .setTokenizer("whitespace") .setTokenFilters("nGram") .execute().actionGet();
3.4.2.22 The put template API 设置模板
-
PutIndexTemplateResponse response = client.admin().indices() .preparePutTemplate("my_template") //my_template模板名称 .setTemplate("product*") //可以被任何以product开头的索引使用 .setSettings(Settings.builder() .put("index.number_of_replicas", 2) //2个副本 .put("index.number_of_shards", 1)) //一个分片 .addMapping("item", XContentFactory.jsonBuilder() .startObject() .startObject("item") .startObject("properties") .startObject("title") .field("type", "string") .endObject() .endObject() .endObject() .endObject()) .execute().actionGet();
3.4.2.23 The delete template API 删除模板
DeleteIndexTemplateResponse response = client.admin().indices() .prepareDeleteTemplate("my_*") //删除以my_开头的模板 .execute().actionGet();
相关推荐
以上代码片段展示了如何在Java中封装Elasticsearch的基本操作。为了确保线程安全,你可能需要将这些方法放在一个静态工具类中,并使用`try-with-resources`处理`RestHighLevelClient`的关闭。同时,根据实际需求,你...
标签《ES Java API 中文文档》强调了文档的内容属性,它属于ElasticSearch的一个重要组成部分,即用Java语言进行数据交互和操作的应用程序接口部分。 从部分内容中可以提取出以下知识点: 1. **Transport Client**...
7. **Java REST客户端的使用**:`RestHighLevelClient`是Elasticsearch提供的高级Java客户端,提供了丰富的API用于操作索引、文档、搜索等。创建客户端实例需要提供ES服务器的URL,可以设置连接参数如超时、重试策略...
在这个基于Elasticsearch 2.1.1的Java API基本操作代码示例中,我们将探讨如何利用Java API进行常见的数据操作,如索引创建、文档插入、查询以及更新。 首先,为了使用Elasticsearch的Java API,我们需要在项目中...
最后,`es`包可能是Elasticsearch相关的操作接口或抽象类,它们定义了与Elasticsearch交互的方法,如添加、更新、删除文档,以及查询等。例如: ```java public interface ElasticsearchRepository { void save...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
在Java环境中操作Elasticsearch,我们通常会利用官方提供的Java API,这是一个非常全面且强大的工具集,让我们能够方便地进行索引管理、查询、过滤、分组和映射设置等操作。 首先,让我们详细了解如何使用Java API...
Java客户端Jest是与Elasticsearch交互的一种高效工具,它提供了简单的API,使得在Java应用中操作Elasticsearch变得简单易行。本资源包含的是Jest客户端的全部依赖jar包,确保了在Java项目中使用Jest进行Elastic...
Java API是Elasticsearch官方提供的与Elasticsearch服务器进行交互的主要工具,它使得开发者能够用Java语言便捷地进行索引、搜索、聚合等多种操作。 ### 一、Elasticsearch核心概念 1. **节点(Node)**: Elastic...
本主题聚焦于“Elasticsearch Java代码实现”,将深入探讨如何使用Java API来执行基本的操作,如创建索引、删除索引、更新索引、模糊搜索以及模糊全文搜索和精确查找。 首先,让我们从`ESManager.java`开始,这个类...
java操作ElasticSearch的工具类。需要添加依赖: <!-- ElasticSearch依赖 --> <groupId>io.searchbox <artifactId>jest <version>6.3.1 <!-- ...
本项目是针对Elasticsearch 5.x版本的Java工具类,旨在简化与SpringBoot集成时的开发流程,通过封装常用API和自定义注解,实现开箱即用的功能。 首先,让我们深入理解Elasticsearch的Java API。Elasticsearch提供了...
开发者可以从中学习如何设置 Elasticsearch 配置,以及如何使用 Java API 进行数据操作。 总的来说,Elasticsearch 结合 Spring Boot 和 Java 提供了一个高效、灵活的解决方案,用于处理大规模数据的搜索和分析任务...
它的Java API是开发人员与Elasticsearch进行交互的主要工具,提供了丰富的功能,使得在Java环境中操作Elasticsearch变得简单而高效。本文将深入探讨离线下载的Java API文档,并解析其中的关键知识点。 **1. Elastic...
在本项目实战中,我们将探讨如何使用Java编程语言,结合Spark和Hive,将Hive中的数据高效地导入到ElasticSearch(ES)中,并利用ES的别名机制实现数据更新的平滑过渡。以下是对这个流程的详细解析: 1. **Hive数据...
在"elasticsearch5.6以上version通用java API"中,我们将会探讨如何利用Java编写工具类,以覆盖更全面的操作,如映射创建、批量插入、聚合查询以及模糊和精确查询。 1. **映射创建**:Elasticsearch的映射(Mapping...
在 Java 应用程序中使用 Elasticsearch,开发者可以利用 Java API 来执行索引、搜索、聚合、更新和删除等操作。这些操作使得 Elasticsearch 成为大数据分析、日志处理和实时搜索等场景的理想选择。 **1. 索引操作**...
**Elasticsearch 6.1.2 Java 客户端详解** Elasticsearch 是一个流行的、分布式的全文搜索引擎,常用于大数据分析、日志收集、实时搜索等场景。其6.1.2版本的Java客户端提供了丰富的API,使得开发者能够方便地在...
searchEngine 是基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等功能。 该项目集成了 Spring Boot、ElasticSearch、RestHighLevelClient、Vue.js、Element-ui、Log4j 和 Fastjson ...
Java做客户端对Elasticsearch服务的增删改查及批量修改操作,代码简洁易懂,思路清晰有注释.详情参考https://blog.csdn.net/linhaiyun_ytdx/article/category/7042758