elasticsearch学习笔记持续更新中

下载安装&&启动

  • 下载

    https://repo.huaweicloud.com/elasticsearch
    
  • 安装

    在上面的下载链接中找到要安装的版本,下载windows版的tar包,解压到对应目录即可

  • 启动

    进入到解压目录的bin文件夹中,在cmd中打开,输入elasticsearch即可

插件安装&&查看

  • 安装

    # 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令
    elasticsearch-plugin install 插件名称
    
  • 查看

    # 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令
    elasticsearch-plugin list
    

启动集群

# 进入到解压目录的bin文件夹中,在cmd中打开,输入以下命令
elasticsearch -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -d
elasticsearch -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -d
elasticsearch -E node.name=node3 -E cluster.name=geektime -E path.data=node3_data -d
elasticsearch -E node.name=node4 -E cluster.name=geektime -E path.data=node4_data -d

数据类型

  1. 字符串类型
    • keyword
    • text
  2. 数字类型
    • integer
    • long
  3. 小数类型
    • float
    • double
  4. 布尔类型
    • true
    • false
  5. 日期
    • data

索引 and 映射

  1. 索引

    # 查看索引
    GET /_cat/indices?v
    
    # 创建索引
    PUT /products
    
    # 创建索引,指定主分片数量和副分片数量
    PUT /orders
    {
      "settings": {
        "number_of_shards": 1,    # 主分片数量
        "number_of_replicas": 0   # 副分片数量
      }
    }
    
    # 删除索引
    DELETE /products
    
  2. 映射

    #创建索引时添加映射
    
    PUT /products
    {
      "mappings": {
        "properties": {
          "id":{
            "type":"integer"
          },
          "title":{
            "type": "keyword"
          },
          "price":{
            "type":"double"
          },
          "create_at":{
            "type":"date"
          },
          "description":{
            "type":"text"
          }
        }
      }
    }
    
    
    # 查看索引信息
    GET /products/_mapping
    

文档

  1. 添加文档

    # 添加文档, id值可以手动添加,如果不手动添加,es会自动创建
    # 手动创建
    POST /products/_doc/1    # products:索引名, 1:文档id
    {
      "id":1,
      "title":"iphone",
      "price":8999.99,
      "create_at":"2022-11-01",
      "description":"十三香,苹果良心出品,亏死了"
    }
    # 自动创建
    POST /products/_doc
    {
    
      "title":"iphone",
      "price":8999.99,
      "create_at":"2022-11-01",
      "description":"十三香,苹果良心出品,亏死了"
    }
    
  2. 删除文档

    # 基于id
    DELETE /products/_doc/id    # products:索引名, id:文档id
    
  3. 更新文档

    POST /products/_doc/id/_update       # products:索引名, 1:文档id
    {
      "doc":{
        "title":"OPPO"
      }
    }
    
  4. 查询文档

    # 基于id查询
    GET /products/_doc/id      # products:索引名, id:文档id
    
  5. 文档批量操作_bulk

    # 批量插入
    POST /products/_doc/_bulk
    {"index":{}}
      {"title":"iphone", "price":8999.99,"create_at":"2022-11-01","description":"十三香,苹果良心出品,亏死了"}
    {"index":{}}
      {"title":"HUAWEI","price":6999.99,"create_at":"2022-11-01","description":"十三香,苹果良心出品,亏死了"}
    
    
    # 批量删除
    POST /products/_doc/_bulk
    {"delete":{"_id":id}}
    {"delete":{"_id":id}}
    
    
    
    # 批量更新
    POST /products/_doc/_bulk
    {"update":{"_id":id}}
      {"doc":{title":"HUAWEI"}}
    

高级查询

  1. 查询所有

    GET /products/_search
    {
      "query":{
        "match_all":{}
      }
    }
    
  2. 关键词查询(term)

    GET /products/_search
    {
      "query": {
        "term": {
          "title": {
            "value": "OPPO"
          }
        }
      }
    }
    
  3. 范围查询(range)

    GET /products/_search
    {
      "query": {
        "range": {
          "price": {
            "gte": 1000,
            "lte": 10000
          }
        }
      }
    }
    
  4. 前缀查询(prefix)

    GET /products/_search
    {
      "query": {
        "prefix": {
          "title": {
            "value": "OP"
          }
        }
      }
    }
    
  5. 通配符查询(wildcard) ?匹配一个字符, *匹配多个字符

    GET /products/_search
    {
      "query": {
        "wildcard": {
          "description": {
            "value": "go*"
          }
        }
      }
    }
    
  6. ids 查询

    GET /products/_search
    {
      "query": {
        "ids": {
          "values": ["wDjA8YEBxR5yBGtYelHg", "wTjO8YEBxR5yBGtYS1GH"]
        }
      }
    }
    
  7. 模糊查询(fuzzy)

    GET /products/_search
    {
      "query": {
        "fuzzy": {
          "title": "opjone"
        }
      }
    }
    
    
  8. bool查询

    GET /products/_search
    {
      "query": {
        "bool": {
          "must": [
            {"ids": {"values": ["wDjA8YEBxR5yBGtYelHg", "wTjO8YEBxR5yBGtYS1GH"]}},
            {"term": {
              "title": {
                "value": "iphone"
              }
            }}
          ]
        }
      }
    }
    
  9. 多字段查询(multi_match)

    
    GET /movies/_search
    {
      "query": {
        "multi_match": {
          "query": "Joy",
          "fields": ["title", "genre"]
        }
      }
    }
    
  10. 默认字段分词查询(query_string)

    GET /products/_search
    {
      "query": {
        "query_string": {
          "default_field": "description",
          "query": "十三"
        }
      }
    }
    
  11. 高亮查询(highlight)

    GET /products/_search
    {
      "query": {
        "query_string": {
          "default_field": "description",
          "query": "十三"
        }
        
      },
       "highlight": {
    
        "fields": {
          "*":{}
        }
        
      }
    }
    
  12. 翻页查询(from),配合数量(size)

    GET /movies/_search
    {
      "query": {
        "match_all": {}
      },
      "size": 5,
      "from":1
    }
    
  13. 排序操作(sort)

    GET /movies/_search
    {
      "query": {
        "match_all": {}
      },
      "size": 5,
      "from":1,
      "sort": [
        {
          "year": {
            "order": "desc"
          }
        }
      ]
    }
    
  14. 返回指定字段(_source)

    GET /movies/_search
    {
      "query": {
        "match_all": {}
      },
      "_source": ["year", "title"]
    }
    

过滤查询

  1. 只筛选出符合的文档,并不计算得分,而且可以缓存文档,更快

    GET /movies/_search
    {
    "query": {
      "bool": {
        "must": [
          {"match_all": {}}
        ],
        "filter": {
          "range": {
            "year": {
              "gte": 2010,
              "lte": 2018
            }
          }
        }
      } 
    }
    }
    

内置分词器

  1. 标准分词器

    • 按照单词分词, 因为统一转为小写,过滤标点符号,中文单字分词

      POST /_analyze
      {
      	"analyzer":"standard",
      	"text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN"
      }
      
  2. simple分词器

    • 英文按照单词分词,英文统一转为小写,去掉符号,中文按照空格分词

      POST /_analyze
      {
      	"analyzer":"simple",
      	"text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN"
      }
      
  3. whitespace分词器

    • 中文,英文按照空格分词,英文不会转为小写

      POST /_analyze
      {
      	"analyzer":"whitespace",
      	"text":"我是一个程序员,秃头的那种是不可能的,I am a good MAN"
      }
      

IK分词器(中文分词器)

  1. 下载

    https://github.com/medcl/elasticsearch-analysis-ik/releases
    
  2. 安装

    下载与elasticsearch对应版本的的文件解压放到elasticsearch安装目录中的plugins文件夹中
    
  3. 使用

    • ik_smart: 拆分的相对不是很细

    • ik_max_word: 拆分的更细

  4. 自定义扩展词和停用词

    1. 修改IK分词器的config目录中的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>         
              <!--用户可以在这里配置自己的扩展字典, 在同目录下编写.dic文件,每行只能放一个关键词,然后将文件名称添加到</entry之前,重启 -->
              <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>
      
      

创建映射指定分词器

PUT /products
{
  "mappings": {
    "properties": {
      "title":{
        "type": "keyword"
      },
      "description":{
        "type":"text",
        "analyzer":"standard"
      }
    }
  }
}

集群

一个集群就是由一个或多个节点组织在一起,他们共同拥有整个数据,并一起提供索引和搜索功能,

一个集群由一个唯一的名字标识,这个名字默认就是elasticsearch

这个名字很重要,因为一个节点只能通过指定某个集群的名字,来加入这个集群

  • 所有节点集群名称必须一致cluster.name
  • 每个节点必须有一个唯一的名字 node.name
  • 开启每个节点远程连接 network.host:0.0.0.0
  • 指定使用ip地址进行集群节点间的通信network.publish_host
  • 修改web端口,tcp端口http.port: transport.tcp.port
  • 指定集群中所有节点通信列表discovery.seed_hosts
  • 允许集群初始化master节点数clster.initial_master_nodes:["node-1", "node-2", "node-3"]
  • 集群最少几个节点可用gateway.recover_after_nodes:2
  • 开启每个节点跨域访问http.cors.enabled:true http.cors.allow-origin:"*"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序烂人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值