【】
使用準(zhǔn)備
1.運(yùn)行環(huán)境需要JDK和Nodejs,分詞器使用IK分詞器
2.同一個(gè)IP服務(wù)端和客戶端的端口號(hào)不同通信會(huì)引發(fā)跨域問題,
需要在ElasticSearch的elasticsearch.yml文件寫上跨域配置
http.cors.enabled: true
http.cors.allow-origin: "*"
3.客戶端根目錄安裝grunt
cmd窗口
npm install -g grunt-cli
npm install
4.啟動(dòng)服務(wù)器elasticsearch-5.6.8\bin/elasticsearch.bat
啟動(dòng)客戶端cmd窗口 grunt server

sp20190829_214021_220.png
導(dǎo)入依賴
<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>
創(chuàng)建客戶端獲取連接
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;
}
創(chuàng)建索引庫(kù)
public void createIndex() throws Exception{
//4: 使用client對(duì)象完成索引庫(kù)的創(chuàng)建,索引庫(kù)名blog
CreateIndexResponse response = transportClient.admin().indices().prepareCreate("blog").get();
System.out.println(response.isAcknowledged());
System.out.println(transportClient);
//5:關(guān)閉
transportClient.close();
}
導(dǎo)入docum數(shù)據(jù)
public void createIndex() throws Exception{
/*1:創(chuàng)建客戶端
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new
TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));*/
TransportClient client =getClient();
//2:創(chuàng)建document
XContentBuilder contentBuilder = XContentFactory.jsonBuilder().startObject()
.field("id",1)
.field("title","elasticsearch是一個(gè)基于lucene的搜索服務(wù)")
.field("content","ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。" +
"它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。" +
"Elasticsearch是用Java開發(fā)的,并作為Apache許可條款下的開放源碼發(fā)布," +
"是當(dāng)前流行的企業(yè)級(jí)搜索引擎。設(shè)計(jì)用于云計(jì)算中,能夠達(dá)到實(shí)時(shí)搜索,穩(wěn)定," +
"可靠,快速,安裝使用方便。")
.endObject();
//3:創(chuàng)建index
client.prepareIndex("blog2", "article", "1").setSource(contentBuilder).get();
//4:關(guān)閉資源
client.close();
}
創(chuàng)建mapping
mapping是用來定義表的規(guī)則,使用什么分詞器使用域的范圍等等。
不支持修改,需要庫(kù)里的mapping為空才能創(chuàng)建
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 最細(xì)切法 和 ik_smart 最小切法
//創(chuàng)建規(guī)則mapping時(shí)候如果沒有配置ik插件,這里會(huì)出現(xiàn)異常
.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()
// 設(shè)置要做映射的索引
.preparePutMapping("blog")
// 設(shè)置做映射的type
.setType("content")
// 設(shè)置mapping信息,可以是XContentBuilder 也可以是json字符串
.setSource(contentBuilder).get();
transportClient.close();
}