ElasticSearch7.6.x最新完整教程通俗易懂


在这里插入图片描述

ElasticSearch概述

在这里插入图片描述

谁在用

在这里插入图片描述

4.Solr和ES的对比及选型

在这里插入图片描述

Solr简介

在这里插入图片描述

Es vs Solr的总结

在这里插入图片描述

Docker 安装ES及插件

Docker 安装ES

1.先查看docker容器中es的镜像列表:

docker search elasticsearch
在这里插入图片描述

2.推荐镜像:nshou/elasticsearch-kibana,已包含Kibana

docker pull nshou/elasticsearch-kibana

3.拉好后查看本机已安装的镜像

docker images

4.运行镜像,注意需要映射容器和本机的端口9200,9300,5601(kibana使用)

启动时进行端口映射:docker run -d -p 9200:9200 -p 9300:9300 -p 5601:5601 --name eskibana nshou/elasticsearch-kibana

5.docker ps 查看当前运行的容器

进入容器:docker exec -it 4d34fbf944a5 /bin/bash

(4d34fbf944a5为ps后看到的容器id)

6.如果报错:stat /bin/bash: no such file or directory": unknown

说明这个容器没有bash,所以执行下面的命令:

sudo docker exec -it 2df4237ffe01 sh

在这里插入图片描述

127.0.0.1:9200

在这里插入图片描述

Elasticsearch-head可视化

elasticsearch-head 是用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。
在这里插入图片描述

安装 cnpm install

下载地址: https://mobz.github.io/elasticsearch-head/

╭─mac@wang.local ~/java_project/es/elasticsearch-head  ‹master›
╰─➤  cnpm install
⠦ [0/10] Installing http-proxy@1.16.x[npminstall:get] retry GET https://registry.npm.taobao.org/grunt-contrib-clean/download/grunt-contrib-clean-1.0.0.tgz after 100ms, retry left 4, error: Error: getaddrinfo ENOTFOUND cdn.npm.taobao.org
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:66:26) {

运行

╰─➤  npm run start                                                                                                                                1> elasticsearch-head@0.0.0 start /Users/mac/java_project/es/elasticsearch-head
> grunt server

Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100

在docker容器中为elasticsearch配置跨域访问

https://www.cnblogs.com/ygxdbmx/p/11032150.html
tips: 安装vim时用 sudo

等待一小会,就能连接
在这里插入图片描述

了解ELK

在这里插入图片描述

Elastic Kibana

Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。

你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。

你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。

Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询的变化。

在这里插入图片描述

ES核心概念

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ik分词器

在这里插入图片描述
https://github.com/medcl/elasticsearch-analysis-ik/releases

查看docker image 使用的 elasticsearch 版本号,所以IK版本需要一致
在这里插入图片描述

docker exec -it 1c9caab2ff77 /bin/bash

elasticsearch@1c9caab2ff77:~/elasticsearch-7.7.0$ cd plugins/

wget https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.7.0/elasticsearch-analysis-ik-7.7.0.zip

下载速度很慢,可以在本地下载再使用docker cp传

docker cp -f /Users/mac/Downloads/ik 1c9caab2ff77:/home/elasticsearch/elasticsearch-7.7.0/plugins

查找es使用分词器的两种方式

在这里插入图片描述

制作分词

如果想使用自己的分词,可以配置自己的文件

elasticsearch@1c9caab2ff77:~/elasticsearch-7.7.0/plugins/ik/config$ cat IKAnalyzer.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
	<comment>IK Analyzer 扩展配置</comment>
	<!--用户可以在这里配置自己的扩展字典 -->
	<entry key="ext_dict"></entry>
	 <!--用户可以在这里配置自己的扩展停止词字典-->
	<entry key="ext_stopwords"></entry>
	<!--用户可以在这里配置远程扩展字典 -->
	<!-- <entry key="remote_ext_dict">words_location</entry> -->
	<!--用户可以在这里配置远程扩展停止词字典-->
	<!-- <entry key="remote_ext_stopwords">words_location</entry> -->
</properties>
elasticsearch@1c9caab2ff77:~/elasticsearch-7.7.0/plugins/ik/config$

在这里插入图片描述
每次操作后都需要重启es容器

Rest风格说明

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

查看默认配置信息

在这里插入图片描述

关于ES文档API操作

在这里插入图片描述

SpringBoot集成ES

package com.kuang.kuangshenesjd.service;

import com.alibaba.fastjson.JSON;
import com.kuang.kuangshenesjd.pojo.Content;
import com.kuang.kuangshenesjd.utils.HtmlParseUtil;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

// 业务编写
@Service
public class ContentService {
    
    @Autowired
    private RestHighLevelClient restHighLevelClient;
    
    // 1. 解析数据,放进es索引库中
    public Boolean parseContent(String keywords) throws IOException {
        ArrayList<Content> contents = new HtmlParseUtil().parseJD(keywords);
        // 把查询的数据放到到es中
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("2m");

        for (int i = 0; i < contents.size(); i++) {
            bulkRequest.add(
                    new IndexRequest("jd_goods")
                    .source(JSON.toJSONString(contents.get(i)), XContentType.JSON));
        }

        BulkResponse bulkResponse = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return bulkResponse.hasFailures();
    }
    
}
package com.kuang.kuangshenesjd.controller;

import com.kuang.kuangshenesjd.service.ContentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.IOException;
import java.util.List;
import java.util.Map;

@Controller
public class ContentController {
    
    
    @Autowired
    private ContentService contentService;
    
    @GetMapping("/parse/{keyword}")
    @ResponseBody
    public Boolean parse(@PathVariable("keyword") String keyword) throws IOException {
        return contentService.parseContent(keyword);
    }
}
http://localhost:9090/search/java/1/20
http://localhost:9090/parse/java

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述