docker 安裝elastic search 、 kibana(可視化管理elastic search)
docker pull elasticsearch:7.12.1
docker pull kibana:7.12.1
?
創(chuàng)建docker自定義網(wǎng)絡(luò)
docker自定義網(wǎng)絡(luò)可以使得容器之間使用容器名網(wǎng)絡(luò)互連
,默認(rèn)的網(wǎng)絡(luò)不會(huì)有這功能。
一定要配置自定義網(wǎng)絡(luò),并將兩個(gè)容器同時(shí)加到網(wǎng)絡(luò)中,否則下面的http://es:9200
會(huì)無(wú)法訪問到es
docker network create es-net
?
啟動(dòng)elastic search、kibana容器
啟動(dòng)elastic search容器
docker run -d \
--name es \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
-e "discovery.type=single-node" \
-v es-data:/usr/share/elasticsearch/data \
-v es-plugins:/usr/share/elasticsearch/plugins \
--privileged \
--network es-net \
-p 9200:9200 \
-p 9300:9300 \
elasticsearch:7.12.1
訪問 http://192.168.137.139:9200 (注意換成自己服務(wù)器的ip地址)
啟動(dòng)kibana容器
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
--network=es-net \
-p 5601:5601 \
kibana:7.12.1
訪問 http://192.168.137.139:5601 (注意換成自己服務(wù)器的ip地址)
?
給es安裝 ik分詞器
默認(rèn)的分詞器對(duì)中文并不友好,ik分詞器可以更好的支持中文分詞
下載地址:https://github.com/medcl/elasticsearch-analysis-ik/releases/tag/v7.12.1(官方有其他的下載方式,可以參考:https://github.com/medcl/elasticsearch-analysis-ik)
查看es-plugins的掛載卷所在目錄
docker volume inspect es-plugins
得到 /var/lib/docker/volumes/es-plugins/_data
將下載的文件解壓縮并傳到服務(wù)器掛在卷中
scp -r ik myserver:/var/lib/docker/volumes/es-plugins/_data
重啟es服務(wù)
docker restart es
ocker logs es | grep ik # 查看ik分詞器是否成功加載
使用Dev Tools
測(cè)試
IK分詞器包含兩種模式:(根據(jù)業(yè)務(wù)選擇)
-
ik_smart
:最少切分 -
ik_max_word
:最細(xì)切分
擴(kuò)展ik分詞器的詞典
奧里給并沒有組成一個(gè)詞
cd /var/lib/docker/volumes/es-plugins/_data/ik/config/
oligei.dic
文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>IK Analyzer 擴(kuò)展配置</comment>
<!--用戶可以在這里配置自己的擴(kuò)展字典 -->
<entry key="ext_dict"></entry>
<entry key="ext_dict">my_dict.dic</entry>
<!--用戶可以在這里配置自己的擴(kuò)展停止詞字典-->
<entry key="ext_stopwords"></entry>
<entry key="ext_stopwords">my_stopwords.dic</entry>
<!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展字典 -->
<!-- <entry key="remote_ext_dict">words_location</entry> -->
<!--用戶可以在這里配置遠(yuǎn)程擴(kuò)展停止詞字典-->
<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
重啟es 和 kibana
docker restart es
docker restart kibana
ocker logs es | grep my_ # 查看日志是否加載了配置
?
?
es 索引庫(kù)操作
創(chuàng)建索引庫(kù)
PUT /user
{
"mappings": {
"properties": {
"info": {
"type": "text",
"analyzer": "ik_smart"
},
"email": {
"type": "keyword",
"index": "false"
},
"name": {
"type": "object",
"properties": {
"fistName": {
"type": "keyword"
},
"lastName": {
"type": "keyword"
}
}
}
}
}
}
刪除索引庫(kù)
DELETE /user
修改索引庫(kù)
索引庫(kù)不支持修改已有的屬性
,但可以增加屬性
PUT /user/_mapping
{
"properties": {
"age": {
"type": "integer"
}
}
}
查詢索引庫(kù)
GET /user
?
?
es 文檔操作
新增文檔
POST /user/_doc/1
{
"info": "學(xué)習(xí)使我快樂",
"email": "xxx@qq.com",
"age": "18",
"name": {
"firstName": "code",
"lastName": "horse"
}
}
刪除文檔
DELETE /user/_doc/1
修改文檔
全量修改
:先刪除,后新建(如果沒有,也會(huì)新建)
PUT /user/_doc/1
{
"info": "學(xué)習(xí)使我快樂222222222222222",
"email": "xxx@qq.com",
"age": "18",
"name": {
"firstName": "code",
"lastName": "horse"
}
}
增量修改
:只修改指定字段的值
POST /user/_update/1
{
"doc": {
"info": "學(xué)習(xí)使我快樂333333333333"
}
}
查詢文檔
GET /user/_doc/1
?
?
Java使用ES (RestAPI)
官方使用文檔:https://www.elastic.co/guide/en/elasticsearch/client/index.html
本教程使用的是 Migrating from the High Level Rest Client
導(dǎo)入依賴
pom.xml
<!--FastJson 官方需要的other dependencies-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.71</version>
</dependency>
springboot依賴管理有可能會(huì)給你導(dǎo)入的依賴版本會(huì)給覆蓋掉解決方案
:覆蓋springboot的版本
<properties>
<elasticsearch.version>7.12.1</elasticsearch.version>
</properties>
文章來源:http://www.zghlxwxcb.cn/news/detail-697487.html
操作索引庫(kù)
IndexDatabaseTest.java
public class IndexDatabaseTest {
private RestHighLevelClient client;
@BeforeEach
public void setUp() { // 創(chuàng)建es連接
this.client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.137.139:9200")
));
}
@Test
public void clientStatus() { // 查看是否連接成功
System.out.println(client);
}
// 創(chuàng)建索引庫(kù)
@Test
public void createIndexDataBase() throws IOException {
CreateIndexRequest request = new CreateIndexRequest("user");
String createIndexDataBaseDSL = "{\n" +
" \"mappings\": {\n" +
" \"properties\": {\n" +
" \"info\": {\n" +
" \"type\": \"text\",\n" +
" \"analyzer\": \"ik_smart\"\n" +
" },\n" +
" \"email\": {\n" +
" \"type\": \"keyword\",\n" +
" \"index\": \"false\"\n" +
" },\n" +
" \"name\": {\n" +
" \"type\": \"object\",\n" +
" \"properties\": {\n" +
" \"fistName\": {\n" +
" \"type\": \"keyword\"\n" +
" },\n" +
" \"lastName\": {\n" +
" \"type\": \"keyword\"\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
" }\n" +
"}";
request.source(createIndexDataBaseDSL, XContentType.JSON);
client.indices().create(request, RequestOptions.DEFAULT);
}
// 刪除索引庫(kù)
@Test
public void deleteIndexDataBase() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest("user");
client.indices().delete(request, RequestOptions.DEFAULT);
}
// 修改索引庫(kù)(只支持增加mapping)
@Test
public void updateIndexDataBase() throws IOException {
PutMappingRequest request = new PutMappingRequest("user");
request.source("{\n" +
" \"properties\": {\n" +
" \"age\": {\n" +
" \"type\": \"integer\"\n" +
" }\n" +
" }\n" +
"}\n", XContentType.JSON);
client.indices().putMapping(request, RequestOptions.DEFAULT);
}
// 查找索引庫(kù)
@Test
public void getIndexDataBase() throws IOException {
GetIndexRequest request = new GetIndexRequest("user");
GetIndexResponse getIndexResponse = client.indices().get(request, RequestOptions.DEFAULT);
Map<String, MappingMetadata> mappings = getIndexResponse.getMappings();
System.out.println(mappings.get("user").sourceAsMap().values());
}
@AfterEach
public void unMount() throws IOException { // 斷開es連接
this.client.close();
}
}
?文章來源地址http://www.zghlxwxcb.cn/news/detail-697487.html
操作文檔
DocTest.java
public class DocTest {
private RestHighLevelClient client;
@BeforeEach
void setUp() { // 創(chuàng)建es連接
this.client = new RestHighLevelClient(RestClient.builder(
HttpHost.create("http://192.168.137.139:9200")
));
}
@Test
public void clientStatus() { // 查看是否連接成功
System.out.println(client);
}
// 創(chuàng)建文檔
@Test
public void createIndexDataBase() throws IOException {
IndexRequest request = new IndexRequest("user").id("1");
String createDocDSL = "{\n" +
" \"info\": \"學(xué)習(xí)使我快樂\",\n" +
" \"email\": \"xxx@qq.com\",\n" +
" \"name\": {\n" +
" \"firstName\": \"code\",\n" +
" \"lastName\": \"horse\"\n" +
" }\n" +
"}";
request.source(createDocDSL,XContentType.JSON);
client.index(request, RequestOptions.DEFAULT);
}
// 刪除文檔
@Test
public void deleteIndexDataBase() throws IOException {
DeleteRequest request = new DeleteRequest("user", "1");
client.delete(request, RequestOptions.DEFAULT);
}
// 修改文檔 (API實(shí)現(xiàn)的是全量修改)
@Test
public void updateIndexDataBase() throws IOException {
UpdateRequest request = new UpdateRequest("user", "1");
request.doc("{\n" +
" \"info\": \"學(xué)習(xí)使我痛苦?。。。。。?!\"\n" +
" }", XContentType.JSON);
client.update(request, RequestOptions.DEFAULT);
}
// 查找文檔
@Test
public void getIndexDataBase() throws IOException {
GetRequest request = new GetRequest("user", "1");
GetResponse response = client.get(request, RequestOptions.DEFAULT);
String json = response.getSourceAsString();
System.out.println(json);
}
@Test
private Map<String, Object> getData(String text) {
Map<String, Object> map = new HashMap<>();
map.put("info", text);
map.put("email", text + "@qq.com");
Map<String, String> name = new HashMap<>();
name.put("firstName", text);
name.put("lastName", text);
map.put("name", name);
System.out.println(JSON.toJSONString(map));
return map;
}
// 批量導(dǎo)入文檔
@Test
public void testBulk() throws IOException {
BulkRequest request = new BulkRequest();
for (int i = 1; i <= 200; i ++ ) {
String text = String.valueOf(i);
Map<String, Object> data = getData(text);
request.add(new IndexRequest("user")
.id(text)
.source(JSON.toJSONString(data), XContentType.JSON)
);
}
client.bulk(request, RequestOptions.DEFAULT);
}
@AfterEach
public void unMount() throws IOException { // 斷開es連接
this.client.close();
}
}
到了這里,關(guān)于Elasticsearch、Kibana以及Java操作ES 的快速使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!