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

    技术2022-07-16  86

    文章目录

    ElasticSearch概述谁在用 4.Solr和ES的对比及选型Solr简介Es vs Solr的总结 Docker 安装ES及插件Docker 安装ESElasticsearch-head可视化安装 cnpm install运行在docker容器中为elasticsearch配置跨域访问 了解ELKElastic Kibana ES核心概念ik分词器查找es使用分词器的两种方式制作分词 Rest风格说明查看默认配置信息 关于ES文档API操作SpringBoot集成ES

    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

    Processed: 0.020, SQL: 10