Elasticsearch索引安装使用

环境

系统环境:centos7.0
远程链接工具:xshell
服务器:
elasticsearch-7.9.3
192.168.137.171

安装介绍

介绍

关系数据库⇒ 数据库⇒表⇒ 行⇒ 列(Columns)

Elasticsearch⇒ 索引(Index)⇒ 类型(type) ⇒ 文档(Docments)⇒ 字段(Fields)  

环境系统

cenos7 
jdk:1.8
elasticsearch:5.6.3
ip:192.168.137.161

下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.6.8.tar.gz

tar -zxvf  elasticsearch-5.6.8 -C /opt

#创建地址
#数据
mkdir /opt/elasticsearch-5.6.8/data
#日志
mkdir /opt/elasticsearch-5.6.8/logs

yaml 配置

 #集群名称
 #cluster.name相同 自动组成集群
 cluster.name: my-application

#节点名称
node.name: node-161

#数据地址
path.data: /opt/elasticsearch-5.6.8/data

#log日志
path.logs: /opt/elasticsearch-5.6.8/logs

#bootstrap.memory_lock: false
#bootstrap.system_call_filter: false
#配置域名 ip
 network.host: 192.168.137.161
 
 #端口号
 http.port: 9200
 
 #静态设置设置主机列表
 discovery.zen.ping.unicast.hosts: ["192.168.137.161"]

执行

#创建用户组 
groupadd elasticsearch
#创建用户并归属组
useradd elasticsearch -g elasticsearch -p elasticsearch

#改变elasticsearch文件夹所有者到当前用户
chown -R elasticsearch:elasticsearch  /data0/es/elasticsearch-5.6.8

#切换用户
su elasticsearch

#启动
./elasticsearch

启动失败

修改elasticsearch.yml文件

bootstrap.memory_lock : false

修改/etc/security/limits.conf文件,增加配置,用户退出后重新登录生效

* soft    nofile          65536
* hard    nofile          65536

最大线程个数太低。修改配置文件/etc/security/limits.conf

* soft    nproc           4096
* hard    nproc           4096

修改/etc/sysctl.conf文件,增加配置vm.max_map_count=262144

vi /etc/sysctl.conf
sysctl -p

请求:

curl -X GET "localhost:9200/_cat/health?v"

响应:

epoch      timestamp cluster       status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1533625274 15:01:14  elasticsearch green           1         1      0   0    0    0        0             0                  -                100.0%

我们可以看到,我们命名为“elasticsearch”的集群现在是green状态。

无论何时我们请求集群健康时,我们会得到green, yellow, 或者 red 这三种状态。

  • Green : everything is good(一切都很好)(所有功能正常)
  • Yellow : 所有数据都是可用的,但有些副本还没有分配(所有功能正常)
  • Red : 有些数据不可用(部分功能正常)

从上面的响应中我们可以看到,集群"elasticsearch"总共有1个节点,0个分片因为还没有数据。

下面看一下集群的节点列表:

安装head插件

wget https://nodejs.org/dist/v12.18.0/node-v12.18.0.tar.gz

tar - zxvf node-v12.18.0 -C / /usr/local/node

下载地址

ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?C=N&O=D
logstash: https://mirrors.huaweicloud.com/logstash/?C=N&O=D
kibana: https://mirrors.huaweicloud.com/kibana/?C=N&O=D

wget  --no-check-certificate https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz

https 要在 wget 后面加上 --no-check-certificate

IK分词器下载地址

https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.13.3/elasticsearch-analysis-ik-7.13.3.zip

熟悉目录

bin 启动文件
config 配置文件
	log4j2 日志配置
	jvm.options java虚拟机相关配置
	elasticsearch.yaml elasticsearch 配置文件  默认端口 9200  跨域配置
lib  相关jar包

重新启动

ps -ef | grep elastic
kill -9 2382(进程号)
elasticsearch -d

外网访问问题

elasticsearch.yml`文件

network.host: 0.0.0.0

[1]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

​ sudo vim /etc/sysctl.conf

​ 添加

​ vm.max_map_count=655360

​ 是否生效

​ sudo sysctl -p

设置 vim /etc/security/limits.conf

  • soft nofile 65536
  • hard nofile 65536
  • soft nproc 4096
  • hard nproc 4096

核心概念

对比

DbES
数据库(database)索引(indices) - 和数据库一样
表(tables)types (慢慢弃用)
行(rows)documents - 文档
字段(columns)fields

就和数据库一样

物理设计

es 在后台把每个索引划分成多个分片 ,每一个分片可以在集群中的不同服务器间迁移

一个人就是一个集群 默认的集群名称就是elaticseath

关于文档的基本操作(重点)

简单分词

GET _analyze
{
  "analyzer": "ik_smart",
  "text": "中国共产党好"
}

更细分词

GET _analyze
{
  "analyzer": "ik_max_word",
  "text": "中国共产党好"
}

添加数据

PUT /test1/type1/1
{
  "name": "陈大玉",
  "age": 3
}

查看

GET test1

通过_cat 可以获得es当前的信息

##查看健康值
GET _cat/health

## 查看具体信息

GET _cat/indices?v

设置类型

PUT /test2
{
  "mappings": {
    "properties": {
      "name":{
        "type": "text"
      },
      "age":{
        "type": "long"
      },
      "birthday":{
        "type": "date"
      }
    }
  }
}

##查看
GET test2

PUT /test3/_doc/1
{
  "name":"陈大大",
  "age":13,
  "birth":"1992-12-10"
}

## 查看数自动添加类型
GET test3

##修改数据 _update
POST /test3/_doc/1/_update
{
  "doc":{
      "name":"张三"
    
  }
}

增加数据

PUT /qiyu/user/1
{
  "name":"狂神说",
  "age":23,
  "desc":"一段操作猛如虎 一看工资2500",
  "tags":["技术宅","温暖","指南"]
}

PUT /qiyu/user/2
{
  "name":"陈宪玉",
  "age":23,
  "desc":"想做一个 厉害的程序员",
  "tags":["技术宅","温暖","指南"]
}

PUT /qiyu/user/3
{
  "name":"陈",
  "age":23,
  "desc":"哈哈",
  "tags":["脾气不多","性格好","瘦"]
}

PUT 修改

## 多字段修改 不传字段会置空

PUT /qiyu/user/4
{
  "name":"小虎宝",
  "age":1,
  "desc":"想做一个可爱的小孩子",
  "tags":["可爱"]
}


GET /qiyu/user/4

单个字段修改

POST /qiyu/user/4/_update
{
  "doc":
  {
    "name":"陈一蒙"
  }
}

简单搜索

##简单搜索
##条件搜索
GET /qiyu/user/_search?q=name:一蒙

##复杂查询 select(排序 分页  高亮 模糊 精准查询)

GET qiyu/user/_search
{
  "query":{
      "match":
      {
        "name":"陈"
      }
    
  }

}

##结果过滤 _source 查询的字段
GET qiyu/user/_search
{
  "query":{
    "match":{
      "name":"一"
    }
  },
   "_source":["name","desc"] 

}

查询排序

## 查询排序

GET qiyu/user/_search
{
  "query":{
    "match":{
      "name":"陈"
    }
  },
  "sort":[
      {
        "age":{
          "order":"asc"
        }
      }
    ]
}

查询分页

## 查询分页 从第几条开始 form  显示多少size

GET qiyu/user/_search
{
  "query":{
    "match":{
      "name":"陈"
    }
  },
  "sort":[
      {
        "age":{
          "order":"asc"
        }
      }
    ],
    "form":0,
    "size":1
}

must 并且

## must 命令 类似 and
GET qiyu/user/_search
{
  "query":{
    "bool":{
      "must": [
        {
            "match": {
              "name": "陈大玉"
            }      
   		},
    	{
      		"match":{
          		"age":23 
      		}
    	}
  	]
	}
  }
}

should 或者

## should 命令相当于 or 

GET qiyu/user/_search
{
  
    "query":{
      "bool":{
        "should": [
          {
              "match":{
                "name":"陈大玉"
              }
          },
          {
              "match":{
                "age":1
              }
          }
        ]
      }
    }
}


must_not 不等于

## must_not 命令不等于 

GET qiyu/user/_search
{
  
    "query":{
      "bool":{
        "must_not": [
          {
              "match":{
                "name":"陈大玉"
              }
          },
          {
              "match":{
                "age":1
              }
          }
        ]
      }
    }
}


_score 查询参数

## _score 匹配度越高分值越高

GET qiyu/user/_search?q=name:

区间查询

##  区间范围相关的 filter   gte 大于等于 lte 小于等于 
GET qiyu/user/_search
{
    "query":{
      "bool":{
       
        "filter":{
          "range": {
            "age": {
              "gte": 0,
              "lte": 20
            }
          }
        }
      }
    }
}

## gt 大于
GET qiyu/user/_search
{
  "query":{
    
    "bool":{
      "filter":{
        "range": {
          "age": {
            "gt": 10
          }
        }
      }
    }
  }
}

# lt 小于
GET qiyu/user/_search
{
  "query":{
      "bool":{
        "filter": {
            "range": {
              "age": {

                "lt": 4
              }
            }
        }
      }
  }
}

多条件查询

## 多条件使用 空格隔开 只要满足一个结果就会被查出来
GET qiyu/user/_search
{
  "query":{
    "match": {
      "tags": "我 可爱"
    }
  }
}


精确查询

、
## 精确查询
## term 查询是直接通过倒排索引指定的词条进行精确产找的
## 分词

## term 直接使用精确查找
## match 会使用分词器解析 (先分析文档 然后在通过分析的文档查询)

## 两种类型
## text  解析使用分词器
## keyword 不解析不使用分词器

## 没有被分析
GET _analyze
{
  "analyzer": "keyword",
  "text":"狂神说java name"
}

## 被拆分了
GET _analyze
{
  "analyzer": "standard",
  "text":"狂神说java name"
}


## 多条件精确查找
GET qiyu/user/_search
{
  "query":{
    "bool": {
      "should": [
        {
          "term": {
              "name": "陈一蒙"
          }
        },
        {
          "term": {
            "age": 1
          }
        }
      ]
    }
  }
}

高亮查询


## 高亮查询 highlight 
GET qiyu/user/_search
{
  "query":{
    "match": {
      "name": "陈"
    }
  },
  "highlight":{
    "pre_tags": "<p class='key' style='coler:red'>",
    "post_tags": "</p>", 
    "fields": {
      "name":{}
    }
  }
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值