springCloud集成elasticsearch

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,同时是可扩展的数据存储和矢量数据库,能够应对日益增多的各种用例。作为 Elastic Stack 的核心,Elasticsearch 能够集中存储您的数据,实现闪电般的搜索速度、精细的相关性调整以及强大的分析能力,并且能够轻松地进行规模扩展。废话少说,开干

一、docker 部署ES

1、创建网络,让ES与Kibana容器互联

docker network create es-net

2、加载镜像

docker pull elasticsearch:7.13.4
 
docker pull kibana:7.13.4

3、运行ES容器

mkdir /home/elasticsearch

docker run -d --name elasticsearch -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" -e "discovery.type=single-node" -e "http.host=0.0.0.0" -v ./es-data:/home/elasticsearch/data -v ./es-plugins:/home/elasticsearch/plugins -v ./es-logs:/home/elasticsearch/logs --privileged --network es-net -p 9200:9200 -p 9300:9300 elasticsearch:7.13.4

4、 运行Kibana

docker run -d --name kibana -e ELASTICSEARCH_HOSTS=http://elasticsearch:9200 --network=es-net -p 5601:5601 kibana:7.13.4

5、安装IK分词器

#进入es容器
docker exec -it elasticsearch bash

#创建tmp
mkdir tmp

#进入tmp
cd tmp

#下载分词器
curl -L -o  elasticsearch-analysis-ik-7.13.4.zip https://github.com/infinilabs/analysis-ik/releases/download/v7.13.4/elasticsearch-analysis-ik-7.13.4.zip
 
#解压
unzip elasticsearch-analysis-ik-7.13.4.zip -d  ../plugins/ik

退出
exit

6、找到Kibana.yml

find / -name kibana.yml

#修改所有diff/usr/share/kibana/config/下有"http://elasticsearch:9200"的kibana.yml,改成http://服务器ip:9200
vim /var/lib/docker/overlay2/c74ccba0cb8f2bc0279b4a5489ec28bfdf113294cfd1e60f46aef3dea4df8ad0/diff/usr/share/kibana/config/kibana.yml


server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://127.0.0.1:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"

7、docker重启Kibana和 elasticsearch,浏览器打开 http://服务器ip:5601

找到dev tools

 console输入下面这段代码

PUT app_info_article
{
    "mappings":{
        "properties":{
            "id":{
                "type":"text"
            },
            "publishTime":{
                "type":"date"
            },
            "layout":{
                "type":"short"
            },
            "images":{
                "type":"text"
            },
            "authorId": {
          		"type": "integer"
       		},
            "title":{
                "type":"text",
                "analyzer":"ik_smart"
            },
            "content":{
                "type":"text",
                "analyzer":"ik_smart"
            }
        }
    }
}

显示下面,即成功连接

二、springCloud集成ES

1、在需要ES的服务中,pom引入依赖

    <properties>        
        <elasticsearch.version>7.13.4</elasticsearch.version>
    </properties>

    <!--elasticsearch-->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
    <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-client</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>${elasticsearch.version}</version>
    </dependency>

2、 在需要ES的服务中,添加application.yml配置文件

#在引入的服务中,自定义elasticsearch连接配置
elasticsearch:
  host: 192.168.200.140
  port: 9200

3、 添加配置类

/**
 * @author 未知
 * @date 2024/10/01 10:00
 */
@Getter
@Setter
@Configuration
@ConfigurationProperties(prefix = "elasticsearch")
public class ElasticConfiguretion {

    private String host;

    private Integer port;

    @Bean
    public RestHighLevelClient createElasticClient() {
        System.out.println(host);
        System.out.println(port);

        return new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost(host, port, "http")
                )
        );
    }

}

4、在需要ES的服务中,添加测试

/**
 * @author 未知
 * @date 2024/10/01 10:00
 */
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = UserApplication.class)
@Slf4j
public class ElasticSearchTest {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    @Test
    public void test01() throws IOException {

        for (int i = 0; i < 10; i++) {

            String id = UUID.randomUUID().toString().substring(0, 3);
            //构建想要存储的对象
            Map<String, Object> map = new HashMap<>();
            map.put("id", id);
            map.put("publishTime", new Date());
            map.put("layout", RandomUtil.randomInt(1000));
            map.put("images", RandomUtil.randomNumbers(10).toString());
            map.put("authorId", RandomUtil.randomInt(1000));
            map.put("content", RandomUtil.randomNumbers(10).toString());

            //指定要存入数据的库
            IndexRequest indexRequest
                    = new IndexRequest("app_info_article").id(id).source(map);

            //创建索引 并保存至es库中
            restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);
        }
    }

    @Test
    public void test02() throws IOException {
        //构建搜索请求对象,需要指定索引库名称
        SearchRequest searchRequest = new SearchRequest("app_info_article");
        //条件构建器
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //布尔查询
        BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

        //查询时间publishTime大于2021-09-21 15:00:00 的所有信息
        RangeQueryBuilder rangeQueryBuilder = QueryBuilders
                .rangeQuery("publishTime")
                .gt(DateUtil.parse("2021-09-21 15:00:00").toJdkDate());
        boolQueryBuilder.filter(rangeQueryBuilder);

        searchSourceBuilder.query(boolQueryBuilder);
        //分页
        searchSourceBuilder.from(0);
        searchSourceBuilder.size(10);
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);

        List<Map> articleList = new ArrayList<>();

        SearchHit[] hits = searchResponse.getHits().getHits();
        for (SearchHit hit : hits) {

            String sourceAsString = hit.getSourceAsString();
            Map map = JSONUtil.toBean(sourceAsString, Map.class);
            articleList.add(map);
        }
        System.out.println(articleList);
    }
}

 至此完结撒花。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值