• ES学习笔记


    ES学习

    1. 安装

    1.1 ES 安装配置

    curl -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.1.2.tar.gz
    
    tar xvf elasticsearch-5.1.2.tar.gz
    
    ln -s elasticsearch-5.1.2 elasticsearch
    
    修改conf/elasticsearch.yaml文件,参考下面的文件
    
    修改句柄 vm.max_map_count
    sudo vim + /etc/sysctl.conf 添加一行 vm.max_map_count = 262144
    sysctl -p 生效修改(查看more /proc/sys/vm/max_map_count)
    临时修改 sysctl -w vm.max_map_count=262144
    
    启动ES ./bin/elasticsearch -d
    
    
    # ---------------------------------- Cluster(edit)-----------------------------------
    cluster.name: tracing-es
    # ------------------------------------ Node(edit) ------------------------------------
    node.name: es01
    #node.attr.rack: r1
    # ----------------------------------- Paths ------------------------------------
    #path.data: /path/to/data
    #path.logs: /path/to/logs
    # ----------------------------------- Memory -----------------------------------
    #bootstrap.memory_lock: true
    # ---------------------------------- Network(edit, 绑定所有)-----------------------------------
    network.host: 0.0.0.0
    http.port: 9200
    # --------------------------------- Discovery(edit)-------------------------------
    discovery.zen.ping.unicast.hosts: ["10.10.73.25", "10.10.73.34", "10.10.66.134"]
    discovery.zen.minimum_master_nodes:  1
    # ---------------------------------- Gateway -----------------------------------
    #gateway.recover_after_nodes: 3
    # ---------------------------------- Various(add)-----------------------------------
    #action.destructive_requires_name: true
    http.cors.enabled: true
    http.cors.allow-origin: "*"
    

    1.2 ES-Head 安装配置

    es5.0之后不能通过.bin/plugin install mobz/elasticsearch-head安装

    • 安装nodejs, 配置环境变量
    • 安装npm(taobao npm)
    • 安装grunt npm install grunt --save
    • 修改head的配置Gruntfile.js
    • npm install
    • 启动服务:./bin/grunt server
    • 访问:http://10.9.31.213:9100

    es-head安装遇到的问题,显示集群链接不上,解决方法(第3点重要):

    1、修改head源码:目录:head/Gruntfile.js,connect下增加hostname属性,设置为*
    2、修改连接地址:目录:head/_site/app.js,修改head的连接地址:this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";把localhost修改成你es的服务器地址
    3、修改elasticsearch的参数:编辑config/elasticsearch.yml:增加新的参数,这样head插件可以访问es  注意,设置参数的时候:后面要有空格! and
    http.cors.enabled: true 
    http.cors.allow-origin: "*"
    

    1.3 ES-Kibana 安装配置

    启动方法

    设置时区

    Management->Advanced Settings
    设置:tz->Asia/shanghai

    1.4 ES-bigdesk 安装

    1. 本地下载bigdesk
    2. 打开index.html页面
    3. 修改BigdeskStore.js, 定位到142行,major == 1改成major >=1
    4. 
    

    2. ES基础知识

    2.1 ES数据类型

    • string相关的:text
    • 数字相关的:long, integer, short, byte, double, float
    • Boolean类型: boolean
    • 二进制:binary
    • 范围: integer_range, float_range, long_range, double_range, date_range
    • 地理数据:geo_point, geo_shape
    • token_count: count the number of tokens in a string
    • completion to provide auto-complete suggestions

    3. ES搜索

    3.1 简易搜索

    搜索_all字段,_all字段是所有字段集合

    GET /index/type/_search?q=xxx
    GET /index/type/_search?q=user:xxx
    

    3.2 bool query

    bool query对应的是lucene的boolquery

    • must: 多个条件完全匹配, 相当于and
    • filter: 字段必须匹配,不考虑score
    • should: 至少匹配一个,相当于or
    • must_not: 多个条件相反匹配,相当not
    GET /_search
    {
      "query": {
        "bool": {
          "must": {
            "term" : { "user" : "kimchy" }
           },
        	"must_not": {
            "term" : { "name" : "kimchy" }
          },
          "should" : {
            { "term" : { "tag" : "elasticsearch" } }
          },
          "filter": {
            "term": { "content": "update" }
          }
        }
      }
    }
    

    3.3 match query

    match查询语句会进行分词,搜索

    GET /_search
    {
      "query": {
        "match": {
          "title": "my first"
        }
      }
    }
    

    3.4 term query

    term(项,分词最小项)表示完全匹配,查询语句不进行分词,文档中必须包含整个搜索的词

    term:过滤,精确匹配

    GET /_search
    {
      "query": {
        "match": {
          "title": "my first"
        }
      }
    }
    

    3.5 range query

    range: 范围查询

    GET /_search
    {
      "query": {
        "range": {
          "age": {
          		"gt":20,
          		"lt":30
         	}
        }
      }
    }
    

    3.6 过滤和查询的区别

    过滤: 特定词和文档是否匹配,范围匹配,不考虑score,可以走缓存

    查询: 特定词和文档过滤值匹配程度,考虑score,不能走缓存

    3.7 处理控制

    exists: tags字段有值的都会被返回

    GET /my_index/posts/_search
    {
        "query" : {
            "filtered" : {
                "filter" : {
                    "exists" : { "field" : "tags" }
                }
            }
        }
    }
    

    missing: 该字段没有值的都会返回

    GET /my_index/posts/_search
    {
        "query" : {
            "filtered" : {
                "filter": {
                    "missing" : { "field" : "tags" }
                }
            }
        }
    }
    

    4. ES Index管理

    4.1 新建索引

    put /myindex
    {
    	"settings":{
    		 "index" : {
                "number_of_shards" : 3,		//主分片数量
                "number_of_replicas" : 2		//每个主分片的复制分片数量
            }
    	},
    	"mappings":{
    		"mytype":{
    			"properties":{
    				"filed_a":{"type":"text/integer"}
    			}
    		}
    	}
    }
    

    ES深入分片

    per-segment机制(动态索引)

    Lucene中的索引是段(segment)集合,segment具有完整功能的倒排索引,一个segment可以包含多个文档,在文档初始写入时独占一个segment。

    一个per-segment search如下工作
    Lucene中的索引是ES的中的一个分片,ES中的索引是分片集合

    1. 新的文档首先写入内存区的索引缓存
    2. 同时这些buffer被提交:
      • 一个新的段——额外的倒排索引——写入磁盘
      • 新的提交点写入磁盘,包括新段的名称
      • 磁盘是fsync’ed(文件同步)——所有写操作等待文件系统缓存同步到磁盘,确保它们可以被物理写入
    3. 新段被打开,它包含的文档可以被检索
    4. 内存的缓存被清除,等待接受新的文档
  • 相关阅读:
    node安装依赖
    Redis高可用持久化方案选择
    分布式系统的一致性和幂等性概念
    Yii2 layout 由 controller 向layout中传递参数值
    Yii2 中 checkboxlist 复选框 默认选中
    centos 搭建redis主从
    php 魔术方法 __call
    vargrant 安装 CentOS-7-x86_64
    MyISAM与innoDB存储引擎有何差别
    centos PHP7 yii2 报错 Call to undefined function yii\helpers\mb_strlen()
  • 原文地址:https://www.cnblogs.com/oldtrafford/p/6736679.html
Copyright © 2020-2023  润新知