【】
使用准备
1.运行环境需要JDK和Nodejs,分词器使用IK分词器
2.同一个IP服务端和客户端的端口号不同通信会引发跨域问题,
需要在ElasticSearch的elasticsearch.yml文件写上跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
3.客户端根目录安装grunt
cmd窗口
npm install -g grunt-cli
npm install
4.启动服务器elasticsearch-5.6.8\bin/elasticsearch.bat
启动客户端cmd窗口 grunt server

sp20190829_214021_220.png
导入依赖
<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>
创建客户端获取连接
public static TransportClient getClient() throws UnknownHostException {
Settings settings = Settings.EMPTY;
TransportClient transportClient = new PreBuiltTransportClient(settings);
transportClient.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
return transportClient;
}
创建索引库
public void createIndex() throws Exception{
//4: 使用client对象完成索引库的创建,索引库名blog
CreateIndexResponse response = transportClient.admin().indices().prepareCreate("blog").get();
System.out.println(response.isAcknowledged());
System.out.println(transportClient);
//5:关闭
transportClient.close();
}
导入docum数据
public void createIndex() throws Exception{
/*1:创建客户端
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new
TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));*/
TransportClient client =getClient();
//2:创建document
XContentBuilder contentBuilder = XContentFactory.jsonBuilder().startObject()
.field("id",1)
.field("title","elasticsearch是一个基于lucene的搜索服务")
.field("content","ElasticSearch是一个基于Lucene的搜索服务器。" +
"它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。" +
"Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布," +
"是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定," +
"可靠,快速,安装使用方便。")
.endObject();
//3:创建index
client.prepareIndex("blog2", "article", "1").setSource(contentBuilder).get();
//4:关闭资源
client.close();
}
创建mapping
mapping是用来定义表的规则,使用什么分词器使用域的范围等等。
不支持修改,需要库里的mapping为空才能创建
public void createMapping() throws Exception{
TransportClient transportClient = getClient();
XContentBuilder contentBuilder = XContentFactory.jsonBuilder()
.startObject()
.startObject("content")
.startObject("properties")
.startObject("id").field("type","long").field("store",true).endObject()
//ik_max_word 最细切法 和 ik_smart 最小切法
//创建规则mapping时候如果没有配置ik插件,这里会出现异常
.startObject("title").field("type","text").field("store",true).field("analyzer","ik_smart").endObject()
.startObject("content").field("type","text").field("store",true).field("analyzer","ik_smart").endObject()
.endObject()
.endObject()
.endObject();
transportClient.admin().indices()
// 设置要做映射的索引
.preparePutMapping("blog")
// 设置做映射的type
.setType("content")
// 设置mapping信息,可以是XContentBuilder 也可以是json字符串
.setSource(contentBuilder).get();
transportClient.close();
}