docker安装elasticsearch与kibana
下载镜像:
docker pull elasticsearch:7.4.2
docker pull kibana:7.4.2
创建目录:
mkdir -p /data/elasticsearch/config
mkdir -p /data/elasticsearch/data
写入配置:
echo "http.host: 0.0.0.0" >> /data/elasticsearch/config/elasticsearch.yml
修改文件夹权限(否则启动后由于没有权限进程异常挂掉):
chmod -R 777 /data/elasticsearch/
指定配置参数并启动:
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms64m -Xmx128m" \
-v /data/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
-d elasticsearch:7.4.2
运行kibana:
docker run --name kibana -e ELASTICSEARCH_HOSTS=http://10.9.31.81:9200 -p 5601:5601 \
-d kibana:7.4.2
###############java demo####################
pom
<!--引入elasticsearch-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>
<!--elasticsearch-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
application.properties
spring.elasticsearch.rest.uris=http://10.9.31.81:9200 spring.elasticsearch.rest.username="" spring.elasticsearch.rest.password=""
ElasticSearchConfig
package com.example.demo.test.es.config;
import org.apache.http.HttpHost;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ElasticSearchConfig {
public static final RequestOptions COMMON_OPTIONS;
static {
RequestOptions.Builder builder = RequestOptions.DEFAULT.toBuilder();
// builder.addHeader("Authorization", "Bearer " + TOKEN);
// builder.setHttpAsyncResponseConsumerFactory(
// new HttpAsyncResponseConsumerFactory
// .HeapBufferedResponseConsumerFactory(30 * 1024 * 1024 * 1024)
// );
COMMON_OPTIONS = builder.build();
}
@Bean
public RestHighLevelClient esRestClient() {
return new RestHighLevelClient(
RestClient.builder(new HttpHost("10.9.31.81", 9200, "http"))
);
}
}
jps Repository
package com.example.demo.test.es.rep;
import com.example.demo.test.es.demo.Demo;
import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends ElasticsearchRepository<Demo.User, Long> {
/**
* 通过ID字段查询
*/
Demo.User queryUserById(String id);
}
test demo
package com.example.demo.test.es.demo;
import cn.hutool.core.util.IdUtil;
import com.alibaba.fastjson.JSON;
import com.example.demo.test.es.config.ElasticSearchConfig;
import com.example.demo.test.es.rep.UserRepository;
import lombok.Data;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import org.springframework.data.elasticsearch.annotations.Field;
import org.springframework.data.elasticsearch.annotations.FieldType;
import org.springframework.test.context.junit4.SpringRunner;
import java.io.IOException;
import java.util.Optional;
@SpringBootTest
@RunWith(SpringRunner.class)
public class Demo {
@Autowired
private RestHighLevelClient client;
@Autowired
private UserRepository userRepository;
@Test
public void indexData() throws IOException {
IndexRequest indexRequest = new IndexRequest("users");
String snowflakeNextIdStr = IdUtil.getSnowflakeNextIdStr();
// 数据的id
indexRequest.id(snowflakeNextIdStr);
// set data type one
// indexRequest.source("userName", "zhangsan", "age", 18, "gender", "男");
// set data type two
User user = new User();
user.setUserName("zhangsan");
user.setAge(18);
user.setGender("男");
String jsonString = JSON.toJSONString(user);
// 要保存的内容
indexRequest.source(jsonString, XContentType.JSON);
// 执行操作
IndexResponse index = client.index(indexRequest, ElasticSearchConfig.COMMON_OPTIONS);
// 提取有用的响应数据
System.out.println("提取有用的响应数据 : "+index);
GetRequest getRequest = new GetRequest("users");
getRequest.id(snowflakeNextIdStr);
// 显示字段
String[] includes = new String[]{"userName", "age", "gender"};
// 排除字段
String[] excludes = Strings.EMPTY_ARRAY;
FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
getRequest.fetchSourceContext(fetchSourceContext);
GetResponse documentFields = client.get(getRequest, ElasticSearchConfig.COMMON_OPTIONS);
// 提取有用的响应数据
System.out.println("提取有用的响应数据 : "+documentFields);
}
@Test
public void indexData2() {
Long id = IdUtil.getSnowflakeNextId();
User user = new User();
user.setId(id);
user.setUserName("zhangsan");
user.setAge(19);
user.setGender("男");
userRepository.save(user);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Optional<User> byId = userRepository.findById(id);
byId.ifPresent(value -> System.out.println("提取有用的响应数据" + value));
}
@Data
@Document(indexName = "users",useServerConfiguration = true, createIndex = false)
public static class User{
@Id
private Long id;
/**
* 分词器名称 ik_max_word
*/
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String userName;
@Field(type = FieldType.Integer)
private Integer age;
@Field(type = FieldType.Text, analyzer = "ik_max_word")
private String gender;
}
}

浙公网安备 33010602011771号