一.添加索引库
1.步骤
1.创建一个java工程。
2.添加jar包,导入maven坐标。
3.编写测试方法实现创建索引库。
3.1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
3.2创建一个客户端Client对象。
3.3使用Client对象创建一个索引库。
3.4关闭Client对象。
2.代码块
(1)pom依赖
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
(2)ESClientDemo01客户端类
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.junit.Test;
import java.net.InetAddress;
public class ESClientDemo01 {
@Test
public void createIndex()throws Exception{
// 1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
Settings settings = Settings.builder()
//put参数1是配置名称,参数2是配置值
.put("cluster.name","my-elasticsearch")
.build();
// 2创建一个客户端Client对象。
TransportClient client = new PreBuiltTransportClient(settings);
//2.2 获取集群的节点列表
//2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
// 3使用Client对象创建一个索引库。
//设置索引库名称
client.admin().indices().prepareCreate("index_hello")
//执行操作
.get();
// 4关闭Client对象。
client.close();
}
}
3.范例
二.添加mapping映射
1.步骤
- 创建一个settings对象。
- 创建一个client对象。
- 创建一个mappings信息,可以是json数据,也可以是字符串,也可以说XContextBuilder。
- 使用client像es服务器发送mapping信息
- 关闭client对象。
2.代码块
@Test
/**
* 添加mapping映射
*/
public void setMappings()throws Exception{
// 1.创建一个settings对象。
Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
// 2.创建一个client对象。
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
// 3.创建一个mappings信息,可以是json数据,也可以是字符串,也可以说XContextBuilder。
//3.1 从XContentFactory工厂对象获取一个json格式的XContentBuilder对象
/*
{
"article":{
"properties":{
"id":{
"type":"long",
"store":true
},
"title":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_smart"
},
"content":{
"type":"text",
"store":true,
"index":true,
"analyzer":"ik_smart"
}
}
}
}
*/
XContentBuilder builder = XContentFactory.jsonBuilder()
//设置最外围{
.startObject()
.startObject("article")//设置article:{
.startObject("properties")//设置properties:{
.startObject("id")//设置id:{
.field("type","long")//设置域
.field("store",true)
.endObject()//设置结束标记 }
.startObject("title")
.field("type","text")
.field("store",true)
.field("index",true)
.field("analyzer","ik_smart")
.endObject()
.startObject("context")
.field("type","text")
.field("index",true)
.field("analyzer","ik_smart")
.endObject()
.endObject()
.endObject()
.endObject();
// 4.使用client像es服务器发送mapping信息
client.admin().indices()
//设置索引库
.preparePutMapping("index_hello")
//设置type
.setType("article")
//设置mapping映射,可以字符串形式、json形式、XContentBuilder形式
.setSource(builder)
//执行操作
.get();
// 5.关闭client对象。
client.close();
}
}
3.范例
三.添加文档对象【方式一】
1.步骤
1.创建一个settings对象。
2.创建一个client对象。
3.创建一个文档对象
4.使用client像es服务器发送文档对象
5.关闭client对象
2.代码块
@Test
/**
* 添加文档对象
*/
public void setMappings2()throws Exception{
// 1.创建一个settings对象。
Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
// 2.创建一个client对象。
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//3.创建一个文档对象
XContentBuilder builder = XContentFactory.jsonBuilder()
.startObject()
.field("id",1l)//l是数据类型,1l是指数值为1,数据类型为long
.field("title","这是添加的新文档")
.field("content","这是文档的内容。。。。")
.endObject();
//4.使用client像es服务器发送文档对象
client.prepareIndex()
.setIndex("index_hello")//设置索引库
.setType("article")//设置type
.setId("1")//设置文档真实id
.setSource(builder)//设置文档对象
.get();//执行操作
//5.关闭client对象
client.close();
}
}
3.范例
四.添加文档对象【方式二】
1.步骤
0.定义一个Article对象类。
1.创建一个settings对象。
2.创建一个client对象。
3.创建一个Article对象
4.设置对象属性
5.将Article对象转换为json格式的字符串
6.使用client对象把Article对象传入索引库
7.关闭客户端
2.代码块
(1)对象类
public class Article {
private long id;
private String title;
private String context;
public Article() {
}
@Override
public String toString() {
return "Article{" +
"id=" + id +
", title='" + title + '\'' +
", context='" + context + '\'' +
'}';
}
public Article(long id, String title, String context) {
this.id = id;
this.title = title;
this.context = context;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
(2)测试类方法
@Test
/**
* 添加文档对象方式二
*/
public void setMappings3()throws Exception{
// 1.创建一个settings对象。
Settings settings = Settings.builder().put("cluster.name","my-elasticsearch").build();
// 2.创建一个client对象。
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
//3.创建一个Article对象
Article article = new Article();
//4.设置对象属性
article.setId(1l);
article.setTitle("这是新建的文档对象2");
article.setContext("这是文档对象2的内容。。。");
//5.将Article对象转换为json格式的字符串
ObjectMapper objectMapper = new ObjectMapper();//该方法需要导入jackJson依赖
String json = objectMapper.writeValueAsString(article);
System.out.println(json);
//6.使用client对象把Article对象传入索引库
client.prepareIndex("index_hello","article","2")//参数1是索引库,参数2是type,参数3是真实id
.setSource(json, XContentType.JSON)//参数1是json数据,参数2是数据类型
.get();
//7.关闭客户端
client.close();
}
(3)pom依赖
<groupId>org.example</groupId>
<artifactId>demo01</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>transport</artifactId>
<version>5.6.8</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-to-slf4j</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.24</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.21</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.12</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.6</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.9.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
3.范例
(1)对象类
(2)测试类
五.根据id进行查询
1.步骤
- 创建一个client对象。
- 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【idsQuery对象获取QueryBuilder】
- 使用client执行查询。
- 得到查询的结果。
- 取查询结果的总记录。
- 取查询结果列表。
- 关闭client对象。
2.代码块
@Test
/*
查询结果
*/
public void testSearchById()throws Exception{
// 1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
Settings settings = Settings.builder()
//put参数1是配置名称,参数2是配置值
.put("cluster.name","my-elasticsearch")
.build();
// 2创建一个客户端Client对象。
TransportClient client = new PreBuiltTransportClient(settings);
//2.2 获取集群的节点列表
//2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
// 3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
QueryBuilder queryBuilder = QueryBuilders
.idsQuery()
.addIds("1","2");
// 4.使用client执行查询。
SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
.setTypes("article")//查询的type
.setQuery(queryBuilder)//查询条件
.get();//执行查询
// 5.得到查询的结果集。
SearchHits hits = searchResponse.getHits();
// 6.取查询结果的总记录。
System.out.println("查询结果的总记录:" + hits.getTotalHits());
// 7.取查询结果列表。
//7.1获取查询结果的迭代器
Iterator<SearchHit> iterator = hits.iterator();
//7.2遍历迭代器
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println("------------获取字符串形式的文档对象数据---------");
System.out.println("查询的结果为:" + searchHit.getSourceAsString());
System.out.println("--------获取文档的属性---------");
Map<String, Object> document = searchHit.getSource();//获取map集合
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("content"));
}
// 8.关闭client对象。
client.close();
}
3.范例
六.根据term进行查询【关键词查询】
1.步骤
- 创建一个client对象。
- 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【termQuery对象获取QueryBuilder】
- 使用client执行查询。
- 得到查询的结果。
- 取查询结果的总记录。
- 取查询结果列表。
- 关闭client对象。
2.代码块
@Test
/*
根据关键词查询结果
*/
public void testQueryByTerm()throws Exception{
// 1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
Settings settings = Settings.builder()
//put参数1是配置名称,参数2是配置值
.put("cluster.name","my-elasticsearch")
.build();
// 2创建一个客户端Client对象。
TransportClient client = new PreBuiltTransportClient(settings);
//2.2 获取集群的节点列表
//2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
// 3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
QueryBuilder queryBuilder = QueryBuilders
.termQuery("title","对象");//参数1是要搜索的域,参数2是关键词
// 4.使用client执行查询。
SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
.setTypes("article")//查询的type
.setQuery(queryBuilder)//查询条件
.get();//执行查询
// 5.得到查询的结果集。
SearchHits hits = searchResponse.getHits();
// 6.取查询结果的总记录。
System.out.println("查询结果的总记录:" + hits.getTotalHits());
// 7.取查询结果列表。
//7.1获取查询结果的迭代器
Iterator<SearchHit> iterator = hits.iterator();
//7.2遍历迭代器
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println("------------获取字符串形式的文档对象数据---------");
System.out.println("查询的结果为:" + searchHit.getSourceAsString());
System.out.println("--------获取文档的属性---------");
Map<String, Object> document = searchHit.getSource();//获取map集合
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("context"));
}
// 8.关闭client对象。
client.close();
}
3.范例
七.根据queryString进行查询【字符串查询(先分词后查询)】
1.步骤
- 创建一个client对象。
- 创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。【queryStringQuery对象获取QueryBuilder】
- 使用client执行查询。
- 得到查询的结果。
- 取查询结果的总记录。
- 取查询结果列表。
- 关闭client对象。
2.代码块
@Test
/*
根据字符串进行查询
*/
public void testQueryStrings()throws Exception{
// 1创建一个Settings对象,相当于一个配置信息。主要配置集群名称。
Settings settings = Settings.builder()
//put参数1是配置名称,参数2是配置值
.put("cluster.name","my-elasticsearch")
.build();
// 2创建一个客户端Client对象。
TransportClient client = new PreBuiltTransportClient(settings);
//2.2 获取集群的节点列表
//2.2.1 参数1是InetAddress.getByName获取ip地址(PPT方式),参数二是端口号(节点对外的端口),而不是服务端口号
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
// 3.创建一个查询对象,可以使用QueryBuilders工具类创建QueryBuilder对象。
QueryBuilder queryBuilder = QueryBuilders
.queryStringQuery("文档对象2")//根据字符串进行创建QueryBuilder对象
.defaultField("title");//设置默认搜索域【field】
// 4.使用client执行查询。
SearchResponse searchResponse = client.prepareSearch("index_hello")//查询的索引库
.setTypes("article")//查询的type
.setQuery(queryBuilder)//查询条件
.get();//执行查询
// 5.得到查询的结果集。
SearchHits hits = searchResponse.getHits();
// 6.取查询结果的总记录。
System.out.println("查询结果的总记录:" + hits.getTotalHits());
// 7.取查询结果列表。
//7.1获取查询结果的迭代器
Iterator<SearchHit> iterator = hits.iterator();
//7.2遍历迭代器
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println("------------获取字符串形式的文档对象数据---------");
System.out.println("查询的结果为:" + searchHit.getSourceAsString());
System.out.println("--------获取文档的属性---------");
Map<String, Object> document = searchHit.getSource();//获取map集合
System.out.println(document.get("id"));
System.out.println(document.get("title"));
System.out.println(document.get("context"));
}
// 8.关闭client对象。
client.close();
}
3.范例