python基本数据类型

时间复杂度注释

n代表容器中元素的数量,k代表参数的值,或者参数的数量。

[注1] =这些业务依赖于“摊销最坏情况”的“Amortized摊销”部分。 根据容器的历史,个别动作可能需要很长时间。

[注2] =对于这些操作,最坏情况n是容器达到的最大尺寸,而不仅仅是当前尺寸。 例如,如果将N个对象添加到字典中,则删除N-1,仍然会为N个对象(至少)调整字典的大小,直到进行另一次插入为止。

list

列表是以数组(Array)实现的。最大的开销发生在超过当前分配大小的增长,这种情况下所有元素都需要移动;或者是在起始位置附近插入或者删除元素,这种情况下所有在该位置后面的元素都需要移动。如果你需要在一个队列的两端进行增删的操作,应当使用collections.deque(双向队列)

查看更多

es-搜索操作

搜索备忘一

原生的url接口

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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# 搜索位置(url)
/_search # 在所有的索引中搜索所有的类型
/gb/_search # 在 gb 索引中搜索所有的类型
/gb,us/_search # 在 gb 和 us 索引中搜索所有的文档
/g*,u*/_search # 在任何以 g 或者 u 开头的索引中搜索所有的类型
/gb/user/_search # 在 gb 索引中搜索 user 类型
/gb,us/user,tweet/_search # 在 gb 和 us 索引中搜索 user 和 tweet 类型
/_all/user,tweet/_search # 在所有的索引中搜索 user 和 tweet 类型

# 分页(url)
POST /_search # 默认size=10, from=0 从0返回
POST /_search?size=5 # 第二页
POST /_search?size=5&from=5
POST /_search?size=5&from=10



# term 精确查找,不计算相关度.
{
"term" : {
"price" : 20
}
}
# 用constant_score 把term包装成filter
POST /my_store/products/_search
{
"query" : {
"constant_score" : {
"filter" : {
"term" : {
"productID" : "XHDK-A-1293-#fJ3"
}
}
}
}
}


# range 过滤器(filter): age > 30
# 过滤器执行速度非常快,不会计算相关度. 精确的筛选.
POST /megacorp/employee/_search
{
"query" : {
"bool": {
"must": {
"match" : {"last_name" : "smith" }
},
"filter": {
"range" : {
"age" : { "gt" : 30 }
}
}
}
}
}




# 全文搜索: 返回相关性排序的结果.  如果有rock没有climbing也可能会返回结果.
POST /megacorp/employee/_search
{
"query" : {
"match" : {
"about" : "rock climbing"
}
}
}
{
"query": {
"match_phrase": {
"content" : {
"query" : "我的宝马多少马力",
"slop" : 1
}
}
}
}
# 实际上下面的query才能正确返回结果,搜索的是content这个字段里包含对应文本的文档


# 精确匹配一系列单词或者短语
POST /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
}
}

# 高亮搜索
POST /megacorp/employee/_search
{
"query" : {
"match_phrase" : {
"about" : "rock climbing"
}
},
"highlight": {
"fields" : {
"about" : {}
}
}
}
# 返回:
{ ...
"hits": {
"total": 1,
"max_score": 0.23013961,
"hits": [
{ ...
"_score": 0.23013961,
"_source": {
"first_name": "John",
"about": "I love to go rock climbing",
"interests": [ "sports", "music" ]
},
"highlight": {
"about": [
"I love to go <em>rock</em> <em>climbing</em>"
]
}
}
]
}
}

# 聚合(aggregations): 统计某些标签的数量(是在搜索结果中进行统计,可以结合其他query)
POST /megacorp/employee/_search
{
"aggs": {
"all_interests": {
"terms": { "field": "interests" }
}
}
}

搜索备忘二

http://www.cnblogs.com/yjf512/p/4897294.html

1
2
3
4
5
6
7
8
9
10
11
12
13
组合式搜索
{
"query": {
{
"bool": {
"must": { "match": { "tweet": "elasticsearch" }},
"must_not": { "match": { "name": "mary" }},
"should": { "match": { "tweet": "full text" }}, # 这些match可以是数组
"filter": { "range": { "age" : { "gt" : 30 }} }
}
}
}
}

elasticsearch 查询(match和term)

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。
由于DSL查询更为直观也更为简易,所以大都使用这种方式。
DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。
这里有一个地方注意的是官方文档里面给的例子的json结构只是一部分,并不是可以直接黏贴复制进去使用的。一般要在外面加个query为key的机构。

match

最简单的一个match例子:

查看更多

安装ES

安装ES

-E Configure a setting
-V, –version
-d, –daemonize 守护进程,后台启动
-p, –pidfile Creates a pid file in the specified path on start
-q, –quiet Turns off standard output/error streams logging in console
-s, –silent show minimal output
-v, –verbose show verbose output

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 启动(先-s 启动成功, 再用-d后台启动)
elasticsearch/bin/elasticsearch -s
# 配置文件
elasticsearch/config/elasticsearch.yml

# 检查状态
curl -XGET '192.168.31.185:9200/_cat/health?v'
# 测试是否启动成功
curl 'http://192.168.31.185:9200/?pretty'
# 查看所有索引!!
curl -XGET '192.168.31.185:9200/_cat/indices?v'


# 创建一个名字=ip_focus 的索引 pretty参数让返回结果更易读
curl -XPUT '192.168.31.185:9200/ip_focus?pretty'
# 删除一个索引
curl -XDELETE '192.168.31.185:9200/customer?pretty'
# 新建/修改一个文档(一行数据) _id=1 如果索引不存在,会自动新建索引=customer
# 当我们没有明确指定ID的时候,我们需要使用POST方法代替PUT来发送请求
PUT /customer/doc/1 { "name": "John Doe" }

启动时报错:elasticsearch max virtual memory areas vm.max_map_count [65530] is too low

1
2
3
4
5
sudo vim /etc/sysctl.conf 
# 在文件末尾加入
vm.max_map_count=655360
# 然后执行
sudo sysctl -p

安装Kibana

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
去官网下载
https://www.elastic.co/cn/downloads/kibana

# 解压文件
tar –zxvf kibana-5.5.2-linux-x86_64.tar.gz–C ./kibana/

# 去config文件夹编辑kibana.yml
#配置本机ip
server.host: "192.168.252.129"
#配置es集群url
elasticsearch.url: "http://192.168.252.129:9200"

# 启动程序 使用&命令启动后,退出当前窗口时需要使用exit退出
cd /bin
./kibana &

访问:http://ip:port ip为kibana安装节点ip,端口默认为5061

查看更多

使用git

git命令行

标签

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
标签分为带附注和不带附注的。我们尽量使用带附注的。

# 本地新建一个tag 名称=V1.2
git tag -a V1.2 -m 'xxxxx'

# 查看本地tag
git tag

# 查看tag详细信息
git tag show V1.2

# 推送到远程仓库
git push origin --tags

# 如果发现有问题,可以删除标签(本地)
git tag -d V1.2
# 推送空的同名版本到远程仓库,等同于删除远程库里的版本
git push origin :refs/tags/V1.2

# 获取远程版本,精确拉取某一个版本的代码
git fetch origin tag V1.2

在board中添加分栏

Issues–>Board–>Add list –>选择要监控的labels

1555049268959

本地分支和远程分支

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看当前跟踪关系
git branch -vv

# 克隆时自动将创建好的`master`分支追踪`origin/master`分支
git clone 服务器地址

# 建立本地分支 xxx, 追踪远程分支origin/yyy
git checkout -b xxx origin/yyy

# 将 xxx 分支追踪远程分支 origin/yyy
git branch --set-upstream xxx origin/yyy
git branch --set-upstream-to=远程仓库名/远程分支名 本地分支名 (把本地的分支绑定到远程的某个分支)

# 设置当前分支跟踪远程分支 origin/yyyy
git branch -u origin/yyyy

设置git默认使用的编辑器

1
2
提交是出现nano界面,可以退出后设置默认编辑器成VIM
git config --global core.editor "vim"

查看更多