pom

    <dependencies>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>6.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency> <dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
</dependencies>

创建索引

package com.zy.esapi;

import com.google.gson.Gson;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentFactory;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.HashMap; /**
* create by zy
* TODO:创建索引
*/
public class CreateIndexTest { private TransportClient client; private IndexResponse indexResponse; /**
* 创建client
*
* @throws UnknownHostException
*/
@Before
public void initClient() throws UnknownHostException {
client = new PreBuiltTransportClient(Settings.builder().put("cluster.name", "myes").build())
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.41"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.42"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.43"), 9300));
} /**
* 常用的 map格式
*
* @throws Exception
*/
@Test
public void index1() throws Exception {
HashMap<String, String> jsonMap = new HashMap<String, String>();
jsonMap.put("id", "1");
jsonMap.put("name", "zhangsan");
jsonMap.put("sex", "1");
jsonMap.put("age", "18");
jsonMap.put("address", "beijing"); //index type id
indexResponse = client.prepareIndex("user", "baseinfo", "1")
.setSource(jsonMap)
.get();
} /**
* 自己拼装json
*
* @throws Exception
*/
@Test
public void index2() throws Exception {
String json = "{" +
"\"id\":\"2\"," +
"\"name\":\"kimchy\"," +
"\"sex\":\"1\"," +
"\"age\":\"22\"," +
"\"address\":\"shanghai\"" +
"}";
indexResponse = client.prepareIndex("user", "baseinfo", "2")
.setSource(json, XContentType.JSON)
.get(); } /**
* XcontentBuilder
*
* @throws IOException
*/
@Test
public void index3() throws IOException {
indexResponse = client.prepareIndex("user", "baseinfo", "3")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("id", "3")
.field("name", "lisi")
.field("age", "18")
.field("sex", "0")
.field("address", "beijing")
.endObject())
.get(); } /**
* 常用的 对象json格式
*/
@Test
public void index4() {
Gson gson = new Gson();
UserBaseInfo user = new UserBaseInfo("6", "xueyou", "13", "1", "xianggang");
String json = gson.toJson(user); indexResponse = client.prepareIndex("user", "baseinfo", user.getId())
.setSource(json, XContentType.JSON)
.get(); } /**
* 批量创建
* 批量操作,可以提高创建索引的速度,主要减少网络请求。
* 如果正常情况,创建一个文档就会发送一次网络请求,其实就是发起一次http请求。
* bulkIndex就可以将多个文档合并在一起之后,发送一次请求。
*
* @throws IOException
*/
@Test
public void index5() throws IOException {
BulkRequestBuilder bulk = client.prepareBulk();
bulk.add(client.prepareIndex("user", "baseinfo", "4")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("id", "4")
.field("name", "wangwu")
.field("age", "18")
.field("sex", "0")
.field("address", "hangzhou")
.endObject()));
bulk.add(client.prepareIndex("user", "baseinfo", "5")
.setSource(new XContentFactory().jsonBuilder()
.startObject()
.field("id", "5")
.field("name", "zhaoliu")
.field("age", "18")
.field("sex", "0")
.field("address", "shenzhen")
.endObject()));
BulkResponse bulkResponse = bulk.get();
System.out.println(bulkResponse);
} /**
* 打印返回信息
*/
@After
public void printResultAndCloseClient() {
System.out.println("index:" + indexResponse.getIndex());
System.out.println("type:" + indexResponse.getType());
System.out.println("id:" + indexResponse.getId());
System.out.println("version:" + indexResponse.getVersion());
System.out.println("status:" + indexResponse.getResult());
client.close();
}
}

删除索引

package com.zy.esapi;

import org.elasticsearch.action.ActionListener;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryAction;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; import java.net.InetAddress;
import java.net.UnknownHostException; /**
* create by zy
* TODO:
*/
public class DeleteIndexTest {
private TransportClient client;
private DeleteResponse response; @Before
public void init() throws UnknownHostException {
Settings settings = Settings.builder().put("cluster.name", "myes").build();
client = new PreBuiltTransportClient(settings)
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.41"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.42"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.43"), 9300));
} @After
public void close() throws UnknownHostException {
if (response != null) {
String index = response.getIndex();
String type = response.getType();
String id = response.getId();
long version = response.getVersion();
System.out.println("index " + index + " type" + type + "" + id + "" + version + "" + version);
RestStatus status = response.status();
System.out.println("status:" + status.getStatus());
client.close();
}
} /**
* 根据文档进行删除
*
* @throws UnknownHostException
*/
@Test
public void delete1() throws UnknownHostException {
response = client.prepareDelete("user", "baseinfo", "1").get();
} @Test
/**
* 根据根据查询结果删除数据,并触发相关事件
*/
public void delete2() throws UnknownHostException {
DeleteByQueryAction.INSTANCE.newRequestBuilder(client)
.filter(QueryBuilders.matchQuery("sex", "1"))
.source("user")
.execute(new ActionListener<BulkByScrollResponse>() {
public void onResponse(BulkByScrollResponse response) {
long deleted = response.getDeleted();
System.out.println("---------------" + deleted);
} public void onFailure(Exception e) {
System.out.println("------------错误了");
}
});
}
}

查询

package com.zy.esapi;

import com.google.gson.Gson;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.MatchAllQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.sort.SortOrder;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Before;
import org.junit.Test; import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList; /**
* create by zy
* TODO:查询
*/
public class QueryTest { private TransportClient client; /**
* 创建client
*
* @throws UnknownHostException
*/
@Before
public void initClient() throws UnknownHostException {
client = new PreBuiltTransportClient(Settings.builder().put("cluster.name", "myes").build())
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.41"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.42"), 9300))
.addTransportAddress(new TransportAddress(InetAddress.getByName("192.168.44.43"), 9300));
} /**
* 根据id查询一个
*/
@Test
public void query1() {
GetResponse response = client.prepareGet("user", "baseinfo", "1").get();
String index = response.getIndex();
String type = response.getType();
String id = response.getId(); System.out.println(response.getSourceAsString());
System.out.println(index);
System.out.println(type);
System.out.println(id); client.close();
} /**
* 查询多个id
*/
@Test
public void query2() {
MultiGetResponse responses = client.prepareMultiGet()
.add("user", "baseinfo", "1")
.add("user", "baseinfo", "2")
.add("user", "baseinfo", "3")
.add("user", "baseinfo", "4")
.get();
ArrayList<UserBaseInfo> users = new ArrayList<UserBaseInfo>();
for (MultiGetItemResponse response : responses) {
String json = response.getResponse().getSourceAsString();
Gson gson = new Gson();
UserBaseInfo user = gson.fromJson(json, UserBaseInfo.class);
users.add(user);
}
System.out.println(users); client.close();
} @Test
public void query3() {
SearchResponse response = client.prepareSearch("user").setTypes("baseinfo")
//所有的查询方式都可以直接new出来,
.setQuery(new MatchAllQueryBuilder())
//5.x以后如果用字段排序,需要在setting中预先设置fielddata=true
.addSort("id", SortOrder.DESC)
//浅分页
.setFrom(1).setSize(3)
.get();
SearchHits hits = response.getHits();
for (SearchHit hit : hits) {
System.out.println(hit.getSourceAsString());
//docid没有值,旧版本有值
//int docId = hit.docId();
//System.out.println(docId);
}
} /**
*
DELETE user
PUT /user/?pretty
PUT user/_mapping/baseinfo
{
"properties":{
"id":{
"type":"text",
"fielddata":true
},
"name":{
"type":"text"
},
"age":{
"type":"text"
},
"sex":{
"type":"text"
},
"address":{
"type":"text"
}
}
}
*/ //--------------------------------search 高亮-------------------------------- //建立索引 需要用ik分词器
/**
* DELETE allarticle
* PUT /allarticle?pretty
* {
* "settings" : {
* "analysis" : {
* "analyzer" : {
* "ik" : {
* "tokenizer" : "ik_max_word"
* }
* }
* }
* },
* "mappings" : {
* "article" : {
* "dynamic" : true,
* "properties" : {
* "id" : {
* "type" : "text",
* "fielddata": true
* },
* "title" : {
* "type" : "text",
* "analyzer" : "ik_max_word"
* },
* "content" : {
* "type" : "text",
* "analyzer" : "ik_max_word"
* }
* }
* }
* }
* }
*/ /**
* 数据准备
*
* @throws UnknownHostException
*/
@Test
public void initPageData() throws UnknownHostException { for (int i = 1; i <= 100; i++) {
// 描述json 数据
Article article = new Article();
article.setId(i + "");
article.setTitle(i + "搜索工作其实很快乐");
article.setContent(i
+ "我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。"); Gson gson = new Gson();
String json = gson.toJson(article); // 建立文档
client.prepareIndex("allarticle", "article", article.getId())
.setSource(json, XContentType.JSON)
.get();
} //释放资源
client.close();
} @Test
//高亮查询
public void test11() throws Exception {
// 搜索数据
SearchRequestBuilder searchRequestBuilder = client
.prepareSearch("allarticle").setTypes("article")
//.setQuery(QueryBuilders.termQuery("title", "搜索"));
.setQuery(QueryBuilders.multiMatchQuery("搜索", "title", "content"));//这种多字段查询效率高些 //设置高亮数据
HighlightBuilder hiBuilder = new HighlightBuilder();
//设置格式
hiBuilder.preTags("<font style='color:red'>");
hiBuilder.postTags("</font>");
//设置字段
hiBuilder.field("title");
hiBuilder.field("content");
searchRequestBuilder.highlighter(hiBuilder); //获得查询结果数据
SearchResponse searchResponse = searchRequestBuilder.get(); //获取查询结果集
SearchHits searchHits = searchResponse.getHits();
System.out.println("共搜到:" + searchHits.getTotalHits() + "条结果!");
//遍历结果
for (SearchHit hit : searchHits) {
System.out.println("start************************************");
System.out.println("String方式打印文档搜索内容:");
System.out.println(hit.getSourceAsString());
System.out.println("-----------------------------------------");
System.out.println("Map方式打印高亮内容");
System.out.println(hit.getHighlightFields()); System.out.println("-----------------------------------------");
System.out.println("遍历高亮集合,打印高亮片段:");
Text[] titles = hit.getHighlightFields().get("title").getFragments();
for (Text str : titles) {
System.out.println(str);
} Text[] contents = hit.getHighlightFields().get("content").getFragments();
for (Text str : contents) {
System.out.println(str);
}
System.out.println("end**************************************");
} //释放资源
client.close();
} }

其他类

package com.zy.esapi;

/**
* create by zy
* TODO:
*/
public class Article {
private String id;
private String title;
private String content; public Article() {
} public Article(String id, String title, String content) {
this.id = id;
this.title = title;
this.content = content;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getTitle() {
return title;
} public void setTitle(String title) {
this.title = title;
} public String getContent() {
return content;
} public void setContent(String content) {
this.content = content;
} @Override
public String toString() {
return "Article{" +
"id='" + id + '\'' +
", title='" + title + '\'' +
", content='" + content + '\'' +
'}';
}
} package com.zy.esapi; import java.io.Serializable; /**
* create by zy
* TODO:
*/
public class UserBaseInfo implements Serializable {
private String id;
private String name;
private String age;
private String sex;
private String address; public UserBaseInfo() {
} public UserBaseInfo(String id, String name, String age, String sex, String address) {
this.id = id;
this.name = name;
this.age = age;
this.sex = sex;
this.address = address;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getAge() {
return age;
} public void setAge(String age) {
this.age = age;
} public String getSex() {
return sex;
} public void setSex(String sex) {
this.sex = sex;
} public String getAddress() {
return address;
} public void setAddress(String address) {
this.address = address;
} @Override
public String toString() {
return "UserBaseInfo{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age='" + age + '\'' +
", sex='" + sex + '\'' +
", address='" + address + '\'' +
'}';
}
}

ElasticSearch的java api的更多相关文章

  1. Elasticsearch中JAVA API的使用

    1.Elasticsearch中Java API的简介 Elasticsearch 的Java API 提供了非常便捷的方法来索引和查询数据等. 通过添加jar包,不需要编写HTTP层的代码就可以开始 ...

  2. ElasticSearch实战系列三: ElasticSearch的JAVA API使用教程

    前言 在上一篇中介绍了ElasticSearch实战系列二: ElasticSearch的DSL语句使用教程---图文详解,本篇文章就来讲解下 ElasticSearch 6.x官方Java API的 ...

  3. 使用Java操作Elasticsearch(Elasticsearch的java api使用)

    1.Elasticsearch是基于Lucene开发的一个分布式全文检索框架,向Elasticsearch中存储和从Elasticsearch中查询,格式是json. 索引index,相当于数据库中的 ...

  4. ElasticSearch AggregationBuilders java api常用聚会查询

    以球员信息为例,player索引的player type包含5个字段,姓名,年龄,薪水,球队,场上位置.index的mapping为: "mappings": { "pl ...

  5. elasticsearch常用JAVA API 实例

    1.引入dependency <dependency> <groupId>org.springframework.data</groupId> <artifa ...

  6. ElasticSearch排序Java api简单Demo

    代码: String time1 = ConstValue.GetCurrentDate(); SortBuilder sortBuilder = SortBuilders.fieldSort(&qu ...

  7. Elasticsearch的Java API做类似SQL的group by聚合。

    https://www.cnblogs.com/kangoroo/p/8033955.html

  8. Elasticsearch JAVA api搞定groupBy聚合

    本文给出如何使用Elasticsearch的Java API做类似SQL的group by聚合.为了简单起见,只给出一级groupby即group by field1(而不涉及到多级,例如group ...

  9. Elasticsearch JAVA api轻松搞定groupBy聚合

    本文给出如何使用Elasticsearch的Java API做类似SQL的group by聚合. 为了简单起见,只给出一级groupby即group by field1(而不涉及到多级,例如group ...

随机推荐

  1. VScode插件

    Visual Studio Code (简称 VS Code / VSC) 是一款免费开源的现代化轻量级代码编辑器,支持几乎所有主流的开发语言的语法高亮.智能代码补全.自定义热键.括号匹配.代码片段. ...

  2. grpc gateway 使用以及docker compose 集成

    1. grpc gateway 安装 参考,比较简单,有需要的依赖可以参考相资料 mkdir tmp cd tmp git clone https://github.com/google/protob ...

  3. jenkins api 使用

    1.  java <dependency> <groupId>com.offbytwo.jenkins</groupId> <artifactId>je ...

  4. ORACLE联机日志文件丢失或损坏的处理方法(转)

    经验总结: 联机日志分为当前联机日志和非当前联机日志,非当前联机日志的损坏是比较简单的,一般通过clear命令就可以解决问题. 损坏非当前联机日志:1.启动数据库,遇到ORA-00312 or ORA ...

  5. ruby关于require路径

    ruby里面的require说明 require './aaaa' 这种方式,包含的是系统路径 相对路径得用下面的 require_relative "./xxxx" 或者使用这个 ...

  6. MongoDB在windows平台分片集群部署

    本文转载自:https://www.cnblogs.com/hx764208769/p/4260177.html 前言-为什么我要使用mongodb 最近我公司要开发一个日志系统,这个日志系统包括很多 ...

  7. (转)Inno Setup入门(二十)——Inno Setup类参考(6)

    本文转载自:http://blog.csdn.net/yushanddddfenghailin/article/details/17251041 存储框 存储框也是典型的窗口可视化组件,同编辑框类似, ...

  8. springboot+idea 热部署

    1 配置pom.xml <!--spring-boot-devtools 热部署--> <dependency> <groupId>org.springframew ...

  9. js手机号正则表达式验证

    var phone = $("#phone").val(); //陈旧版 var parphone = /^(((13[0-9]{1})|(17[0-9]{1})|(15[0-9] ...

  10. 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    转自:http://www.cocoachina.com/industry/20140514/8418.html 转自wufawei的博客 当你的应用提交到App Store或者各个渠道之后,请问你多 ...