Elasticsearch JavaApi

 官网JavaApi地址:https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-search.html

  博客:http://blog.csdn.net/molong1208/article/details/50512149

1.创建索引与数据

把json字符写入索引,索引库名为twitter、类型为tweet,id为1

语法

import static org.elasticsearch.common.xcontent.XContentFactory.*;

IndexResponse response = client.prepareIndex("twitter", "tweet", "1")
        .setSource(jsonBuilder()
                    .startObject()
                        .field("user", "kimchy")
                        .field("postDate", new Date())
                        .field("message", "trying out Elasticsearch")
                    .endObject()
                  )
        .get();

 相关用例

 1 public static boolean create(String index, String type, @Nullable String id,String json){
 2                 
 3         //index:索引库名
 4         //type:类型
 5         //id:文档的id
 6         //json:json字符串
 7         //response.isCreated():创建是否成功
 8         IndexResponse response = client.prepareIndex(index, type, id)
 9 //                .setSource("{ \"title\": \"Mastering ElasticSearch\"}")
10                 .setSource(json)
11                 .execute().actionGet();
12         
13         return response.isCreated();
14         
15     }

2.删除索引与数据

索引库名为twitter、类型为tweet,id为1

语法

DeleteResponse response = client.prepareDelete("twitter", "tweet", "1").get();

 相关用例

 1     public static boolean remove(String index, String type, String id){
 2         
 3         //index:索引库名
 4         //type:类型
 5         //id:文档的id
 6         //response.isFound():是否删除成功
 7         DeleteResponse response = client.prepareDelete(index, type, id).get();
 8         
 9         return response.isFound();
10         
11     }

3.修改数据

你可以创建一个UpdateRequest并将其发送到客户端:

UpdateRequest updateRequest = new UpdateRequest();
updateRequest.index("index");
updateRequest.type("type");
updateRequest.id("1");
updateRequest.doc(jsonBuilder()
        .startObject()
            .field("gender", "male")
        .endObject());
client.update(updateRequest).get();

 相关用例

 1     public static boolean update(String index, String type, String id,XContentBuilder endObject) 
 2             throws IOException, InterruptedException, ExecutionException{
 3         
 4 //        XContentBuilder endObject = XContentFactory.jsonBuilder()
 5 //        .startObject()
 6 //            .field("name", "jackRose222")
 7 //            .field("age", 28)
 8 //            .field("address","上海徐家汇")
 9 //        .endObject();
10         
11         //index:索引库名
12         //type:类型
13         //endObject:使用JSON格式返回内容生成器
14         
15         UpdateRequest updateRequest = new UpdateRequest();
16         updateRequest.index(index);
17         updateRequest.type(type);
18         updateRequest.id(id);
19         updateRequest.doc(endObject);
20         UpdateResponse updateResponse = client.update(updateRequest).get();
21         
22         return updateResponse.isCreated();
23 
24     }

也可以用prepareUpdate()方法

client.prepareUpdate("ttl", "doc", "1")
        .setDoc(jsonBuilder()               
            .startObject()
                .field("gender", "male")
            .endObject())
        .get();

 相关用例

 1     public static boolean update2(String index, String type, String id,
 2             Map<String,Object> fieldMap) throws IOException, InterruptedException, ExecutionException{
 3                 
 4         //index:索引库名
 5         //type:类型
 6         //endObject:使用JSON格式返回内容生成器
 7         
 8         //使用JSON格式返回内容生成器
 9         XContentBuilder xcontentbuilder = XContentFactory.jsonBuilder();        
10         
11         if(fieldMap!=null && fieldMap.size() >0){
12             xcontentbuilder.startObject();
13             
14             for (Map.Entry<String, Object> map : fieldMap.entrySet()) {
15                 if(map != null){
16                     xcontentbuilder.field(map.getKey(),map.getValue());
17                 }
18             }
19             
20             xcontentbuilder.endObject();
21             
22             UpdateResponse updateResponse = client.prepareUpdate(index, type, id)
23                     .setDoc(xcontentbuilder)
24                     .get();
25                     
26                     return updateResponse.isCreated();
27         }
28         
29         return false;                
30 
31     }

4.查询

 4.1搜索API允许一个执行一个搜索查询,返回搜索结果匹配的查询。它可以跨越一个或多个指标和执行一个或多个类型。查询可以使用查询提供的Java API。搜索请求的主体使用SearchSourceBuilder构建。这是一个例子:

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.QueryBuilders.*;
SearchResponse response = client.prepareSearch("index1", "index2")
        .setTypes("type1", "type2")
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.termQuery("multi", "test"))                 // Query
        .setPostFilter(QueryBuilders.rangeQuery("age").from(12).to(18))     // Filter
        .setFrom(0).setSize(60).setExplain(true)
        .get();

请注意,所有参数都是可选的。这是最小的搜索你可以写

// MatchAll on the whole cluster with all default options
SearchResponse response = client.prepareSearch().get();

尽管Java API定义了额外的搜索类型QUERY_AND_FETCH DFS_QUERY_AND_FETCH,这些模式内部优化和不应该由用户显式地指定的API。 

相关用例

 1     public static SearchResponse search(String index, String type) {
 2 
 3         // 查询全部
 4         // SearchResponse response2 =
 5         // client.prepareSearch().execute().actionGet();
 6 
 7         // 按照索引与类型查询
 8         //index:索引库名
 9         //type:类型
10         SearchResponse response = client.prepareSearch(index).setTypes(type)
11                 // .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
12                 // .setQuery(QueryBuilders.termQuery("multi", "test")) // Query
13                 // .setFrom(0)
14                 // .setSize(5)
15                 // .setExplain(true)
16                 .execute().actionGet();
17         return response;
18     }

4.2多条件查询

http://blog.csdn.net/zx711166/article/details/77847120

 1 public class EsBool{
 2     public void BoolSearch(TransportClient client){
 3         //多条件设置
 4         MatchPhraseQueryBuilder mpq1 = QueryBuilders
 5             .matchPhraseQuery("pointid","W3.UNIT1.10LBG01CP301");
 6         MatchPhraseQueryBuilder mpq2 = QueryBuilders
 7             .matchPhraseQuery("inputtime","2016-07-21 00:00:01");
 8         QueryBuilder qb2 = QueryBuilders.boolQuery()   
 9                                 .must(mpq1)   
10                                 .must(mpq2);
11         SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
12         sourceBuilder.query(qb2);
13         //System.out.println(sourceBuilder.toString());
14 
15         //查询建立
16         SearchRequestBuilder responsebuilder = client
17                 .prepareSearch("pointdata").setTypes("pointdata");
18         SearchResponse myresponse=responsebuilder
19                     .setQuery(qb2)
20                     .setFrom(0).setSize(50)
21                     .addSort("inputtime", SortOrder.ASC)
22                     //.addSort("inputtime", SortOrder.DESC)
23                     .setExplain(true).execute().actionGet();
24             SearchHits hits = myresponse.getHits();
25             for(int i = 0; i < hits.getHits().length; i++) {
26                 System.out.println(hits.getHits()[i].getSourceAsString());
27 
28             }
29     }
30 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java3y

阅读SSM项目之scm

导入项目 项目是由eclipse来编写的,我使用的开发环境是Idea,那么就需要将eclipse项目导入进去Idea中。要想项目能够启动起来。是这样干的: 导入...

355110
来自专栏cloudskyme

一步一步学lucene——(第三步:索引篇)

在前面概要的了解了lucene的内容下面就深入一下lucene的各个模块。这里我们主要深入一下lucene的索引,就是如何构建索引的过程及概念。 lucene与...

41560
来自专栏cloudskyme

结构体存入文件并且取出

首先定义结构体 struct student_type { char name[10]; int num; int age; } stu...

41060
来自专栏后端沉思录

并行执行任务思考

这篇文章由之前的并行执行任务发展而来,如何生成task,在之前的文章中,生成task方式如下:

8710
来自专栏xiaoheike

Hibernate save, saveOrUpdate, persist, merge, update 区别

hibernate save()方法能够保存实体到数据库,正如方法名称save这个单词所表明的意思。我们能够在事务之外调用这个方法,这也是我不喜欢使用这个方法保...

16730
来自专栏美团技术团队

【美团技术团队博客】Dive into Category

本文系学习Objective-C的runtime源码时候整理所成,主要剖析了category在runtime层的实现原理以及和category相关的方方面面,包...

37060
来自专栏一个会写诗的程序员的博客

spring boot 集成mybatis 注解版查询

spring boot 和 mybatis已经正常集成,在使用查询时使用的是注解,(项目没有任何XML文件)

10810
来自专栏Golang语言社区

go语言的sql包原理与用法分析

本文实例讲述了go语言的sql包原理与用法。分享给大家供大家参考,具体如下: go的sql包是在pkg/database中,里面的两个包sql和sql/driv...

46160
来自专栏Flutter&Dart

DartVM服务器开发(第二十一天)--Dart中的Gson(jaguar_serializer)

将上面的Info改为List<Info> 重新运行命令pub run build_runner build 转换跟上面一样

22910
来自专栏机器人网

中英文对照,瞬间理解西门子PLC指令

指令( 英文全称意思 ) :指令含义 1、LD ( Load 装载 ) :动合触点 2、LDN ( Load Not 不装载 ) : 动断触点 3、A ( A...

36270

扫码关注云+社区

领取腾讯云代金券