ElasticSearch常用功能总结

ElasticSearch:

  1. 简介:简称es,是一个分布式可扩展的实时搜索和分析引擎,一个建立在全文搜索引擎 Apache Lucene™ 基础上的搜索引擎,默认端口9200,具有一下概念:

    • **shard分片:**一台服务器,无法存储大量的数据,ES把一个index里面的数据,分为多个shard,分布式的存储在各个服务器上面。
    • **replica副本:**一个分布式的集群,难免会有一台或者多台服务器宕机,在ES集群中,我们一模一样的数据有多份能正常提供查询和插入的分片我们叫做 primary shard,其余的我们就管他们叫做 replica shard(备份的分片)。
    • 可扩展到上百台服务器,处理PB级别的结构化或非结构化数据
  2. ELK的下载地址

    https://www.elastic.co/cn/downloads/
    
  3. Elasticsearch与关系型数据术语对照:ElasticSearch常用功能总结_第1张图片

  4. 是ELK的一个组成,是一个产品,而且是非常完善的产品,ELK代表的是:E就是ElasticSearch,L就是Logstach,K就是kibana

    **E:**EalsticSearch 搜索和分析的功能

    **L:**Logstach 搜集数据的功能,类似于flume(使用方法几乎跟flume一模一样),是日志收集系统

    **K:**Kibana 数据可视化(分析),可以用图表的方式来去展示,文不如表,表不如图,是数据可视化平台

  5. Lucene 作为 Apache 开源的一款搜索工具,一直以来是实现搜索功能的神兵利器,现今火热的 Solr 和 Elasticsearch 均基于该工具包进行开发,而 Lucene 之所以能在搜索中发挥至关重要的作用正是因为倒排索引ElasticSearch常用功能总结_第2张图片

  6. 常用的脚本:

    • operate_es.sh:

      #!/bin/bash
      
      while [ "1" == "1" ]
      do
      	echo "=================== 请输入相应命令进行操作 ==================="
      	echo "-------------------    1  查看ES运行状态   -------------------"
      	echo "-------------------    2    启动 ES        -------------------"
      	echo "-------------------    3    关闭 ES        -------------------"
      	echo "-------------------    4     退出          -------------------"
      	read -p "请输入序号:" read_num
      	echo ${read_num}
      	case ${read_num} in
      		"1")
      			echo -e "\033[34m ---------- 选择序号:1 ---------- \033[0m"
              	   #sh start_es.sh
      	         ;;
      		"2")
      			echo -e "\033[34m ---------- 选择序号:2 ---------- \033[0m"
      			  #sh see_es.sh
      		 ;;
      		"3")
              		echo -e "\033[34m ---------- 选择序号 3 ---------- \033[0m"
      			  #sh stop_es.sh
      		 ;;
      		 *)
      			echo -e "\033[34m ---------- 选择序号:4 ---------- \033[0m"
      			break;
      		 ;;
      		 esac
      done
      
    • see_es.sh:

      #!/bin/bash
      es_ps=`jps|grep Elasticsearch`
      OLD_IFS="$IFS"
      IFS=" "
      arr=($es_ps)
      IFS="$OLD_IFS"
      if [ -z "${arr[0]}" ]
      
      then
          echo -e "\033[31m Elasticsearch 未启动............. \033[0m"
      else
         echo -e "\033[31m --------------Elasticsearch已经在运行,进程id:${arr[0]} -------------- \033[0m"
      fi
      
    • start_es.sh:

      #!/bin/sh
      es=/home/elasticsearch/elasticsearch-6.7.1/bin
      cd ${es}
      #cd /home/elasticsearch/elasticsearch-6.7.1/bin
      #sh elasticsearch 
      sh elasticsearch -d
      echo -e "\033[5;31m elasticsearch 后台正在启动............ \033[0m"
      
    • stop_es.sh:

      #!/bin/bash
      es_ps=`jps|grep Elasticsearch`
      OLD_IFS="$IFS"
      IFS=" "
      arr=($es_ps)
      IFS="$OLD_IFS"
      if [ -z "${arr[0]}" ]  
      then  
          echo -e "\033[31m Elasticsearch 未启动............. \033[0m"
      else
         echo -e "\033[31m 正在停止Elasticsearch,进程id: ${arr[0]} \033[0m"
         kill -9 ${arr[0]}
         echo -e "\033[31m 进程已停止................. \033[0m"
      fi
      
  7. 分词器:全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干Token(词元), 这些算法称为Tokenizer(分词器), 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为Token Filter(词元处理器), 被处理后的结果被称为Term(词), 文档中包含了几个这样的Term被称为Frequency(词频)。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为Character Filter(字符过滤器), 这整个的分析算法被称为Analyzer(分析器)

    • 分词器的类型有standard analyzer,每个字都会分词,推荐使用安装ik分词器

    • Text:会分词,然后进行索引,keyword:不进行分词,直接索引

    • 查看分词效果:

      GET /_analyze
      {
          "text":"我们的家乡",
          "analyzer":"standard"
      }
      
  8. json格式的索引:指定多个分词器需要子属性

    {
        "properties":{
            "id":{
                "type":"keyword"
            },
            "mascLibId":{
                "type":"keyword"
            },
            "mascText":{
                "type":"text",
                "ananlyzer":"hanlp_nlp",
                "fields":{
                    "standard":{
                       "type":"text",
                       "ananlyzer":"hanlp_nlp",
                    }
                }
            },
            "paperdate":{
                "type":"date",
                "formate":"yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
            }
        }
    }
    
  9. es的Restful的操作方式操作资源:↓↓↓

    Restful就是一个资源定位、资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。REST是REpresentational State Transfer的缩写(表述性状态转移)

    资源:互联网所有的事物都可以被抽象为资源 REST是面向资源的,而资源是通过URI进行暴露的,操作资源通过HTTP动词来实现,URI暴露资源时,URI强调不要使用动词

    规则:

    CRUD 动作 HTTP 方法
    Create POST
    Read GET
    Update PUT
    Delete DELETE

    **无状态:**REST是无状态的,对每个资源的请求,都不依赖与其他资源或其他请求,每个资源,都是可寻址的,都至少有一个url能对其定位。

    • #查看所有信息
      GET indexname/_search
      {
          "from":0,
          "size":30,
          "query":{
              "match_all":{}
          }
      }
      
    • #按条件查询
      GET indexname/_search
      {
          "query":{
             "match":{
                 "title":"哈哈"
             }
          }
      }
      
    • #根据id更新稿件信息
      POST indexname/_update/55681224665412
      {
          "doc":{
              "title":"更改之后的标题",
              "text":"更改之后的文本"
          }
      }
      
    • #插入数据
      POST indexname/_doc/9865522255555
      {
          "id":"9865522255555",
          "title":"插入的标题",
          "text":"插入的文本",
          "date":null
      }
      
    • #根据条件删除数据
      POST indexname/_delete_by_query?refresh
      {
      "query":{
          "bool":{
              "must_not":{
                  "match":{
                      "authorId":"000000"
                  }
              }
          }
      }
      }
      
    • #查询排序
      GET indexname/_search
      {
          "size":100,
          "query":{
              "match":{
                  "chanel":"04"
              }
          },
          "sort":[
              {
                  "date":{
                      "order":"desc"
                  }
              },
              {
                  "_score":{
                      "order":"desc"
                  }
              }
          ]
      }
      
    • #查询去重
      {
      	"collapse": {
      		"field": "过滤的字段"
      	},
      	"query": {
      		"bool": {
      
      		}
      	}
      }
      
    • #查询某种数据量的大小
      POST ccbnpmasc/_count
      {
          "query":{
              "match":{
                  "chanel":"01"
              }
          }
      }
      
  10. es集群加密码:

一: 生成证书

在elasticsearch目录下执行,会在目录elasticsearch的文件目录生成elastic-stack-ca.p12文件,比如我这里是/home/elasticsearch

./elasticsearch-certutil ca

Please enter the desired output file [elastic-stack-ca.p12]: elastic-stack-ca.p12
Enter password for elastic-stack-ca.p12 :

生成 elastic-stack-ca.p12后,执行命令elasticsearch-certutil,需要注意的是elastic-stack-ca.p12文件必须是完整路径

./elasticsearch-certutil cert --ca /home/elasticsearch/elastic-stack-ca.p12

Enter password for CA (/home/elasticsearch/elastic-stack-ca.p12) :
Please enter the desired output file [elastic-certificates.p12]: elastic-certificates.p12
Enter password for elastic-certificates.p12 : #这里可以不用输入密码,直接按回车键

Certificates written to /home/elasticsearch/elastic-certificates.p12

生成的elastic-certificates.p12文件拷贝到每个节点的config目录下

二 :修改配置elasticsearch.yml

elasticsearch.yml配置文件中增加下列配置

xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: elastic-certificates.p12

三 :配置密码

在bin目录下输入下列命令

./elasticsearch-setup-passwords interactive

Enter password for [elastic]: Reenter password for [elastic]: Enter password for [apm_system]: Reenter password for [apm_system]: Enter password for [kibana]: Reenter password for [kibana]: Enter password for [logstash_system]: Reenter password for [logstash_system]: Enter password for [beats_system]: Reenter password for [beats_system]: Enter password for [remote_monitoring_user]: Reenter password for [remote_monitoring_user]: Changed password for user [apm_system] Changed password for user [kibana] Changed password for user [logstash_system] Changed password for user [beats_system] Changed password for user [remote_monitoring_user] Changed password for user [elastic]

  1. kinaba 的后台启动

    nohup ./kibana & 
    
  2. kibana 强制关闭

    netstat -anp |grep 5601
    kill -9 pid
    
  3. es的安装

    es kibana  logstash 下载地址  https://www.oracle.com/java/technologies/javase/jdk12-archive-downloads.html
    
    tar -zxvf elasticsearch-7.10.1-linux-x86_64.tar.gz
    
    cd elasticsearch-7.10.1
    
    mkdir data  (mkdir logs)
    
    vim /config/elasticsearch.yml  修改配置文件
    
  4. 安装jdk

    下载地址: https://www.oracle.com/java/technologies/javase/jdk12-archive-downloads.html
    
    tar -zxvf jdk-12.0.2_linux-x64_bin.tar.gz
    
    修改环境变量 vim /etc/profile
    
    
    export JAVA_HOME=/home/ap/ccbnp/jdk_12/jdk-12.0.2
    export CLASSPATH=$JAVA_HOME/lib
    export PATH=$JAVA_HOME/bin:$PATH
    
    使其生效 source /etc/profile
    
    别的用户无法使用 vim ~/.bash_profile 需要修改这个文件
    
    
    

你可能感兴趣的:(elasticsearch,lucene,搜索引擎)