herefree 发布的文章

Search API

指定查询的索引

2020-03-25 15-50-32.png

一、URI Search(用的不多)

在URI中使用查询参数

2020-03-25 16-01-52.png

2020-03-25 16-09-16.png

2020-03-25 16-10-31.png

2020-03-25 16-12-11.png

2020-03-25 16-13-30.png

二、Request Body Search

官方文档

使用Elasticsearch提供的,基于JSON格式的更加完备的Query Domain Specific Language(DSL)

2020-03-25 15-58-06.png

#ignore_unavailable=true,可以忽略尝试访问不存在的索引“404_idx”导致的报错
POST /movies,404_idx/_search?ignore_unavailable=true
{
  "profile": true,
    "query": {
        "match_all": {}
    }
}
#查询movies分页
POST /kibana_sample_data_ecommerce/_search
{
  "from":10,
  "size":20,
  "query":{
    "match_all": {}
  }
}


#对日期排序
POST kibana_sample_data_ecommerce/_search
{
  "sort":[{"order_date":"desc"}],
  "query":{
    "match_all": {}
  }

}

#source filtering
POST kibana_sample_data_ecommerce/_search
{
  "_source":["order_date"],
  "query":{
    "match_all": {}
  }
}


#脚本字段
GET kibana_sample_data_ecommerce/_search
{
  "script_fields": {
    "new_field": {
      "script": {
        "lang": "painless",
        "source": "doc['order_date'].value+'hello'"
      }
    }
  },
  "query": {
    "match_all": {}
  }
}

#match查询
POST movies/_search
{
  "query": {
    "match": {
      "title": "last christmas"
    }
  }
}

POST movies/_search
{
  "query": {
    "match": {
      "title": {
        "query": "last christmas",
        "operator": "and" #and表示query的两个词必须同时出现
      }
    }
  }
}
#短语查询 Match Phrase
POST movies/_search
{
  "query": {
    "match_phrase": {
      "title":{
        "query": "one love"
      }
    }
  }
}

POST movies/_search
{
  "query": {
    "match_phrase": {
      "title":{
        "query": "one love",
        "slop": 1  #one 与love之间可以存在其他词
      }
    }
  }
}
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }



#基本语法
POST /products/_search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "price" : "30" }
      },
      "filter": {
        "term" : { "avaliable" : "true" }
      },
      "must_not" : {
        "range" : {
          "price" : { "lte" : 10 }
        }
      },
      "should" : [
        { "term" : { "productID.keyword" : "JODL-X-1937-#pV7" } },
        { "term" : { "productID.keyword" : "XHDK-A-1293-#fJ3" } }
      ],
      "minimum_should_match" :1
    }
  }
}

#改变数据模型,增加字段。解决数组包含而不是精确匹配的问题
POST /newmovies/_bulk
{ "index": { "_id": 1 }}
{ "title" : "Father of the Bridge Part II","year":1995, "genre":"Comedy","genre_count":1 }
{ "index": { "_id": 2 }}
{ "title" : "Dave","year":1993,"genre":["Comedy","Romance"],"genre_count":2 }

#must,有算分
POST /newmovies/_search
{
  "query": {
    "bool": {
      "must": [
        {"term": {"genre.keyword": {"value": "Comedy"}}},
        {"term": {"genre_count": {"value": 1}}}

      ]
    }
  }
}

#Filter。不参与算分,结果的score是0
POST /newmovies/_search
{
  "query": {
    "bool": {
      "filter": [
        {"term": {"genre.keyword": {"value": "Comedy"}}},
        {"term": {"genre_count": {"value": 1}}}
        ]

    }
  }
}


#Filtering Context
POST _search
{
  "query": {
    "bool" : {

      "filter": {
        "term" : { "avaliable" : "true" }
      },
      "must_not" : {
        "range" : {
          "price" : { "lte" : 10 }
        }
      }
    }
  }
}


#Query Context
POST /products/_bulk
{ "index": { "_id": 1 }}
{ "price" : 10,"avaliable":true,"date":"2018-01-01", "productID" : "XHDK-A-1293-#fJ3" }
{ "index": { "_id": 2 }}
{ "price" : 20,"avaliable":true,"date":"2019-01-01", "productID" : "KDKE-B-9947-#kL5" }
{ "index": { "_id": 3 }}
{ "price" : 30,"avaliable":true, "productID" : "JODL-X-1937-#pV7" }
{ "index": { "_id": 4 }}
{ "price" : 30,"avaliable":false, "productID" : "QQPX-R-3956-#aD8" }


POST /products/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "productID.keyword": {
              "value": "JODL-X-1937-#pV7"}}
        },
        {"term": {"avaliable": {"value": true}}
        }
      ]
    }
  }
}


#嵌套,实现了 should not 逻辑
POST /products/_search
{
  "query": {
    "bool": {
      "must": {
        "term": {
          "price": "30"
        }
      },
      "should": [
        {
          "bool": {
            "must_not": {
              "term": {
                "avaliable": "false"
              }
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}


#Controll the Precision
#range范围查询
POST _search
{
  "query": {
    "bool" : {
      "must" : {
        "term" : { "price" : "30" }
      },
      "filter": {
        "term" : { "avaliable" : "true" }
      },
      "must_not" : {
        "range" : {
          "price" : { "lte" : 10 }
        }
      },
      "should" : [
        { "term" : { "productID.keyword" : "JODL-X-1937-#pV7" } },
        { "term" : { "productID.keyword" : "XHDK-A-1293-#fJ3" } }
      ],
      "minimum_should_match" :2
    }
  }
}



POST /animals/_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "text": "brown" }},
        { "term": { "text": "red" }},
        { "term": { "text": "quick"   }},
        { "term": { "text": "dog"   }}
      ]
    }
  }
}

POST /animals/_search
{
  "query": {
    "bool": {
      "should": [
        { "term": { "text": "quick" }},
        { "term": { "text": "dog"   }},
        {
          "bool":{
            "should":[
               { "term": { "text": "brown" }},
                 { "term": { "text": "brown" }},
            ]
          }

        }
      ]
    }
  }
}


DELETE blogs
POST /blogs/_bulk
{ "index": { "_id": 1 }}
{"title":"Apple iPad", "content":"Apple iPad,Apple iPad" }
{ "index": { "_id": 2 }}
{"title":"Apple iPad,Apple iPad", "content":"Apple iPad" }

#boost
# boost >1 打分相关度相对性提升
#0<boost<1 打分相关度相对性降低
#boost<0 贡献负分
POST blogs/_search
{
  "query": {
    "bool": {
      "should": [
        {"match": {
          "title": {
            "query": "apple,ipad",
            "boost": 1.1
          }
        }},

        {"match": {
          "content": {
            "query": "apple,ipad"
          }
        }}
      ]
    }
  }
}

查询结果

2020-03-25 15-59-0.png

参考极客时间Elasticsearch课程

Ubuntu18.04 连不上网 报“有线连接未托管”

新来一台服务器,插上网线发现,没有弹出登录页面,ifconfig之后也只显示ipv6的地址,不显示ipv4的地址,在网络连接页面也不显示有线连接的配置。

ubuntu18.jpg

一开始按照ubuntu18,只显示ipv6不显示ipv4地址思路去查解决方案,网上有好多让自己设置ipv4等方法,个人感觉不怎么靠谱,之后又插着网线,重启了下服务器。发现显示以太网未托管。

393891516.jpg

解决方案:

sudo vim /etc/NetworkManager/NetworkManager.conf

将里面的

managed=false 改为true

最后

sudo service network-manager restart 

问题解决。

参考:https://blog.csdn.net/daerzei/article/details/85058130

概念

1.镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。
2.容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。
3.仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。

Docker镜像的分类

1.基础镜像,可以去docker.io上下载,也可以在国内的Docker仓库下载
2.自定义镜像,可以基于基础镜像实现镜像的自定义
Docker镜像的相关命令
1.docker images
2.docker search centos
3.docker pull centos:7
Docker仓库的配置/etc/docker/daemon.json,重启Docker
{
"registry-mirrors": ["http://hub-mirror.c.163.com/"]
}

国内仓库pull镜像

docker pull hub-mirror.c.163.com/library/centos:7
docker images
镜像导出备份,删除和导入
重命名:docker tag hub-mirror.c.163.com/library/centos:7 centos:7
导出镜像:docker save hub-mirror.c.163.com/library/centos:7 >/tmp/centos.tar
删除镜像:docker rmi centos:7
镜像导入:docker load < /tmp/centos7.tar

Docker 容器

可以使用镜像生成对应运行的容器,一个镜像可以生成多个容器
Centos7镜像生成的容器系统是Centos7,Ubuntu镜像生成的容器系统是Ubuntu的
使用Centos7镜像启动容器
docker run -it centos:7 /bin/bash
i表示交互式,t表示打开一个Shell窗口
宿主机上查看容器的相关操作
1.docker ps:查看运行的容器。docker ps -a:查看所有容器
2.docker inspect:查看容器详细信息
3.docker logs:查看容器日志
4.docker rm:删除容器,docker rm -f:强制删除容器

容器后台运行的特点
如果没有永久运行的程序,终端一退出容器就会马上退出
容器永久运行的条件:需要有永久运行的程序,并且使用run -d后台启动容器
启动后台容器:docker run -d centos:7 /bin/bash -c "while true;do echo helloworld; sleep 5; done"
进入后台容器:docker exec -it xxx /bin/bash
后台容器的停止
停止后台容器:docker stop xxx 或者 docker kill xxx
批量删除容器:docker rm -f xxx xxx

进入容器后ctrl+p+q可以退出终端而不关闭容器,也可以直接关闭终端,容器中pid为1的进程只要不被杀死,容器就不会被关闭。

自定义镜像

容器的临时性
1.容器里的操作当容器删除了就没了
2.最好不要把数据存储在容器里

可将宿主机文件挂载到docker中,或者使用docker数据卷操作 参见docker数据卷

Docker自定义镜像
一般自带的镜像无法满足特定的要求,需要基于基础镜像来自定义Docker镜像
Docker镜像制作的两种方法
1.基于Docker Commit制作镜像
2.基于Dockerfile制作镜像,Dockerfile方式为主流制作镜像的方式

Docker Commit

给基础镜像新增ifconfig命令
docker run --name helloworld -it centos /bin/bash
yum install net-tools -y

保存为镜像

docker commit xx(容器名称) myimage:v1.0
docker images

参考51 CTO 2019Docker入门实战视频

一个docker容器启动之后,我们进入可以看到一个操作系统的所有文件。

我们可以通过chroot这个命令可以更改一个程序运行时的根目录。

假设,我们现在有一个 $HOME/test 目录,想要把它作为一个 /bin/bash 进程的根目录。首先,创建一个 test 目录和几个 lib 文件夹:

$ mkdir -p $HOME/test
$ mkdir -p $HOME/test/{bin,lib64,lib}
$ cd $T

然后,把 bash 命令拷贝到 test 目录对应的 bin 路径下:

$ cp -v /bin/{bash,ls} $HOME/test/bin

接下来,把 bash 命令需要的所有 so 文件,也拷贝到 test 目录对应的 lib 路径下。

$ T=$HOME/test
$ list="$(ldd /bin/ls | egrep -o '/lib.*\.[0-9]')"
$ for i in $list; do cp -v "$i" "${T}${i}"; done

最后,执行 chroot 命令,告诉操作系统,我们将使用 $HOME/test 目录作为 /bin/bash 进程的根目录:

$ chroot $HOME/test /bin/bash

这时,你如果执行 "ls /",就会看到,它返回的都是 $HOME/test 目录下面的内容,而不是宿主机的内容。

这个挂载在容器根目录上、用来为容器进程提供隔离后执行环境的文件系统,就是所谓的“容器镜像”。它还有一个更为专业的名字,叫作:rootfs(根文件系统)。

Docker容器运行过程

  1. 启用 Linux Namespace 配置;
  2. 设置指定的 Cgroups 参数;
  3. 切换进程的根目录(Change Root)。

Cgroup和Namespace类似,也是将进程进行分组,但它的目的和namespace不一样,Namespace是为了隔离进程组之间的资源,而Cgroup是为了对一组进程进行统一的资源监控和限制。

它最主要的作用,就是限制一个进程组能够使用的资源上限,包括 CPU、内存、磁盘、网络带宽等等。

在Linux中,Cgroups给用户暴露出来的接口是文件系统,以文件与目录形式组织在/sys/fs/cgroup路径之下。

root@herefree:/sys/fs/cgroup# ls
blkio    cpu,cpuacct  freezer  net_cls           perf_event  systemd
cpu      cpuset       hugetlb  net_cls,net_prio  pids        unified
cpuacct  devices      memory   net_prio          rdma
  1. cpu 子系统,主要限制进程的 cpu 使用率。
  2. cpuacct 子系统,可以统计 cgroups 中的进程的 cpu 使用报告。
  3. cpuset 子系统,可以为 cgroups 中的进程分配单独的 cpu 节点或者内存节点。
  4. memory 子系统,可以限制进程的 memory 使用量。
  5. blkio 子系统,可以限制进程的块设备 io。
  6. devices 子系统,可以控制进程能够访问某些设备。
  7. net_cls 子系统,可以标记 cgroups 中进程的网络数据包,然后可以使用 tc 模块(traffic control)对数据包进行控制。
  8. net_prio — 这个子系统用来设计网络流量的优先级
  9. freezer 子系统,可以挂起或者恢复 cgroups 中的进程。
  10. ns 子系统,可以使不同 cgroups 下面的进程使用不同的 namespace
  11. hugetlb — 这个子系统主要针对于HugeTLB系统进行限制,这是一个大页文件系统。
如何使用?

在对应子系统下面创建一个目录。

root@herefree:/sys/fs/cgroup/cpu# mkdir container
root@herefree:/sys/fs/cgroup/cpu# cd container/
root@herefree:/sys/fs/cgroup/cpu/container# ls
cgroup.clone_children  cpuacct.usage_percpu_sys   cpu.shares
cgroup.procs           cpuacct.usage_percpu_user  cpu.stat
cpuacct.stat           cpuacct.usage_sys          notify_on_release
cpuacct.usage          cpuacct.usage_user         tasks
cpuacct.usage_all      cpu.cfs_period_us
cpuacct.usage_percpu   cpu.cfs_quota_us

后台写一个死循环脚本,运行起来

 while : ; do : ; done &

查看cpu占用

jiaoben.png

使被该进程组限制的进程每100ms时间只能使用20ms的CPU时间。

echo 20000 > /sys/fs/cgroup/cpu/container/cpu.cfs_quota_us

将被限制进程的PID写入到container组里的task文件。

echo 11036 > /sys/fs/cgroup/cpu/container/tasks 

再次查看

jiaoben2.png

对于 Docker 等 Linux 容器项目来说,它们只需要在每个子系统下面,为每个容器创建一个控制组(即创建一个新目录),然后在启动容器进程之后,把这个进程的 PID 填写到对应控制组的 tasks 文件中就可以了。