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号