Linux安装npm

a 下载地址
https://nodejs.org/en/download/

b 解压,分两步进行

1
2
xz -d node-v8.9.4-linux-x64.tar.xz
tar -xvf node-v8.9.4-linux-x64.tar

c 配置环境变量
修改/etc/profile的PATH变量

1
export PATH=$PATH:/data/software/node-v8.9.4-linux-x64/bin

d 使环境变量生效

1
source /etc/profile

Linux top命令之VIRT

Top命令监控某个进程的资源占有情况 下面是各种内存: VIRT:virtual memory usage
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长 100m,而不是实际的使用量
RES:resident memory usage 常驻内存
1、进程当前使用的内存大小,但不包括swap out
2、包含其他进程的共享
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小

Elasticsearch(5.x) Template的使用

官方模板定义
Dynamic templates

template字段用来匹配索引名字
keyword是String的一种子类型,说明字段是not not_analyzed
使用的时候将//开头的两行注释去掉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
PUT /_template/template1
{
"order": 0,
"template": "index*",
"mappings": {
"_default_": {
"dynamic_templates": [

//针对特别字段进行定义
{
"long_to_date": {
"mapping": {
"doc_values": true,
"type": "date"
},
"match": "dt",
"match_mapping_type": "long"
}
},

//以下是通用字段定义
{
"long2integer": {
"mapping": {
"doc_values": true,
"type": "integer"
},
"match": "*",
"unmatch":"dt",
"match_mapping_type": "long"
}
},
{
"string2keyword": {
"mapping": {
"index": "not_analyzed",
"omit_norms": true,
"doc_values": true,
"type": "keyword"
},
"match": "*",
"match_mapping_type": "string"
}
},

{
"date": {
"mapping": {
"doc_values": true,
"type": "date",
"format":"strict_date_optional_time||epoch_millis"
},
"match": "*",
"match_mapping_type": "date"
}
}

],
"_all": {
"enabled": false
}
}
}
}

数据类型Keyword和text的区别

From: http://blog.csdn.net/lionel_fengj/article/details/78367570

在 ES2.x 版本字符串数据是没有 keyword 和 text 类型的,只有string类型,ES更新到5版本后,取消了 string 数据类型,代替它的是 keyword 和 text 数据类型,那么 keyword 和 text 有什么区别了?
Text 数据类型被用来索引长文本,比如说电子邮件的主体部分或者一款产品的介绍。这些文本会被分析,在建立索引前会将这些文本进行分词,转化为词的组合,建立索引。允许 ES来检索这些词语。text 数据类型不能用来排序和聚合。

curl -XPUT 'localhost:9200/employees/' -d '
{
    "mappings":{
        "employee":{
             "properties": {
                 "intro":"text"
             }
        }
    }
}
'

Keyword 数据类型用来建立电子邮箱地址、姓名、邮政编码和标签等数据,不需要进行分词。可以被用来检索过滤、排序和聚合。keyword 类型字段只能用本身来进行检索。

curl -XPUT 'localhost:9200/employees/' -d '
{
    "mappings":{
        "employee":{
             "properties": {
                 "name":"keyword"
             }
        }
    }
}
'

注意,如果不像以上通过mapping 配置索引时,遇到字符串类型时候的字端,系统会默认为“text”类型。检索的时候对字符串进行分析。所以要想只通过字段本身来进行检索,还是需要按照上面把该字段改为“keyword”类型。

Elasticsearch报错总结

  1. No search type for [count]
    可能是因为版本没有选对。比如使用5.X的Elasticsearch,在Grafana上的DataSource总选择的却是2.X

  2. 使用filter搜索不到数据
    使用

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    GET /tracker/_search
    {
    "query": {
    "bool": {
    "filter": {
    "term": {
    "bro": "Chrome"
    }
    }
    }
    }
    }

语句搜索数据时,无法搜到。当使用

1
2
3
4
5
6
7
8
9
10
11
12
GET /tracker/_search
{
"query": {
"bool": {
"filter": {
"term": {
"bro": "chrome"
}
}
}
}
}

搜索数据时,则可以。这其中最关键的是使用filter时,过滤term需要使用英文小写。

在Elasticsearch中对 text 类型的字段进行聚合异常Fielddata is disabled,Set fielddata=true

编程 Best Practices

项目管理

在一个项目中把服务器相关的配置(公共配置)和程序相关的配置(私有配置)分开,然后公共配置(根据约定大于配置)放到服务器固定的路径,而私有配置则随项目一起发布。亲自实践,项目发布效果显著提升。

Elasticsearch
  • 同一类型的数据用相同的前缀和模板

Grafana的使用

  1. Metrics下的interval的用法:
    1M表示1个自然月,从每个月的第1天到这个月的最后一天。
    其他的interval依次类推。

Google Play中怎么手动下架应用

以下是从google play上下架你的App的步骤:

  • 选中你要下架的App
  • 点击菜单 商店发布 > 定价和分发范围
  • 在打开的页面中,点击“取消发布”按钮
  • 最后点击右下角的“提交更新”

google play下架应用