排序查询

创建数据

PUT books/_doc/1
{"name":"顾老二","age":30,"from": "gu","desc": "皮肤黑、武器长、性格直","tags": ["黑", "长", "直"]
}PUT books/_doc/2
{"name":"大娘子","age":18,"from":"sheng","desc":"肤白貌美,娇憨可爱","tags":["白", "富","美"]
}PUT books/_doc/3
{"name":"龙套偏房","age":22,"from":"gu","desc":"mmp,没怎么看,不知道怎么形容","tags":["造数据", "真","难"]
}PUT books/_doc/4
{"name":"石头","age":29,"from":"gu","desc":"粗中有细,狐假虎威","tags":["粗", "大","猛"]
}PUT books/_doc/5
{"name":"魏行首","age":25,"from":"广云台","desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags":["闭月","羞花"]
}

降序

2.1 降序:desc

想到排序,出现在脑海中的无非就是升(正)序和降(倒)序。比如我们查询顾府都有哪些人,并根据age字段按照降序,并且,我只想看nmaeage字段:

GET books/doc/_search
{"query": {"match": {"from": "gu"}},"sort": [{"age": {"order": "desc"}}]
}

上例,在条件查询的基础上,我们又通过sort来做排序,根据age字段排序,是降序呢还是升序,由order字段控制,desc是降序。

2.2 升序:asc

那么想要升序怎么搞呢?

GET books/doc/_search
{"query": {"match_all": {}},"sort": [  # 这是一个列表,多个排序规则,往后再添加键值对就可以了,排序规则从上往下{"age": {"order": "asc"}}]
}

上例,想要以升序的方式排列,只需要将order值换为asc就可以了。

三 不是什么数据类型都能排序

那么,你可能会问,除了age,能不能以别的属性作为排序条件啊?来试试:

结果跟我们想象的不一样,报错了!

注意:在排序的过程中,只能使用可排序的属性进行排序。那么可以排序的属性有哪些呢?

  • 数字
  • 日期

其他的都不行!

分页查询

二 分页查询:from/size

我们来看看elasticsearch是怎么将结果分页的:

GET books/doc/_search
{"query": {"match_all": {}},"sort": [{"age": {"order": "desc"}}], "from": 2,"size": 1
}

上例,首先以age降序排序,查询所有。并且在查询的时候,添加两个属性fromsize来控制查询结果集的数据条数。

  • from:从哪开始查
  • size:返回几条结果

上例中仅有一条数据,那是为啥呢?因为我们现在只有5条数据,从第4条开始查询,就只有1条符合条件,所以,就返回了1条数据。

学到这里,我们也可以看到,我们的查询条件越来越多,开始仅是简单查询,慢慢增加条件查询,增加排序,对返回结果进行限制。所以,我们可以说:对于elasticsearch来说,所有的条件都是可插拔的,彼此之间用,分割。比如说,我们在查询中,仅对返回结果进行限制:

GET lqz/doc/_search
{"query": {"match_all": {}},"from": 4,"size": 2
}
# 这个的结果就是查询所有然后从第五个开始选取两条,没超出限制的话

布尔查询

一 前言

布尔查询是最常用的组合查询,根据子查询的规则,只有当文档满足所有子查询条件时,elasticsearch引擎才将结果返回。布尔查询支持的子查询条件共4中:

  • must(and)
  • should(or)
  • must_not(not)
  • filter

下面我们来看看每个子查询条件都是怎么玩的。

must

现在,我们用布尔查询所有from属性为gu的数据:

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}}]}}
}

上例中,我们通过在bool属性(字段)内使用must来作为查询条件,那么条件是什么呢?条件同样被match包围,就是fromgu的所有数据。
这里需要注意的是must字段对应的是个列表,也就是说可以有多个并列的查询条件,一个文档满足各个子条件后才最终返回。

结果如下:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.2876821,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}

上例中,可以看到,所有from属性为gu的数据查询出来了。

那么,我们想要查询fromgu,并且age30的数据怎么搞呢?

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}},{"match": {"age": 30}}]}}
}

上例中,在must列表中,在增加一个age30的条件。

结果如下:

{"took" : 8,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 1.287682,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 1.287682,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}}]}
}

上例,符合条件的数据被成功查询出来了。

注意:现在你可能慢慢发现一个现象,所有属性值为列表的,都可以实现多个条件并列存在

should

那么,如果要查询只要是fromgu或者tags闭月的数据怎么搞?

GET lqz/doc/_search
{"query": {"bool": {"should": [{"match": {"from": "gu"}},{"match": {"tags": "闭月"}}]}}
}

上例中,或关系的不能用must的了,而是要用should,只要符合其中一个条件就返回。

结果如下:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 4,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "5","_score" : 0.5753642,"_source" : {"name" : "魏行首","age" : 25,"from" : "广云台","desc" : "仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags" : ["闭月","羞花"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.2876821,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}

返回了所有符合条件的结果。

must_not

那么,如果我想要查询from既不是gu并且tags也不是可爱,还有age不是18的数据怎么办?

GET lqz/doc/_search
{"query": {"bool": {"must_not": [{"match": {"from": "gu"}},{"match": {"tags": "可爱"}},{"match": {"age": 18}}]}}
}

上例中,mustshould都不能使用,而是使用must_not,又在内增加了一个age18的条件。

结果如下:

{"took" : 9,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 1.0,"hits" : [{"_index" : "books","_type" : "doc","_id" : "5","_score" : 1.0,"_source" : {"name" : "魏行首","age" : 25,"from" : "广云台","desc" : "仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags" : ["闭月","羞花"]}}]}
}

上例中,只有魏行首这一条数据,因为只有魏行首既不是顾家的人,标签没有可爱那一项,年龄也不等于18!
这里有点需要补充,条件中age对应的18你写成整形还是字符串都没啥……

filter

那么,如果要查询fromguage大于25的数据怎么查?

filter需要在bool内部,并且如果是and条件,需要用must,如果使用了should,会认为是should和filter是或者的关系

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}}],"filter": {"range": {"age": {"gt": 25}}}}}
}

这里就用到了filter条件过滤查询,过滤条件的范围用range表示,gt表示大于,大于多少呢?是25。

结果如下:

{"took" : 2,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 2,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}}]}
}

上例中,age大于25的条件都已经筛选出来了。

那么要查询fromguage大于等于30的数据呢?

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}}],"filter": {"range": {"age": {"gte": 30}}}}}
}

上例中,大于等于用gte表示。

结果如下:

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.2876821,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}}]}
}

那么,要查询age小于25的呢?

GET lqz/doc/_search
{"query": {"bool": {"filter": {"range": {"age": {"lt": 25}}}}}
}

上例中,小于用lt表示,结果如下:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 2,"max_score" : 0.0,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "2","_score" : 0.0,"_source" : {"name" : "大娘子","age" : 18,"from" : "sheng","desc" : "肤白貌美,娇憨可爱","tags" : ["白","富","美"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.0,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}

在查询一个age小于等于18的怎么办呢?

GET lqz/doc/_search
{"query": {"bool": {"filter": {"range": {"age": {"lte": 18}}}}}
}

上例中,小于等于用lte表示。结果如下:

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.0,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "2","_score" : 0.0,"_source" : {"name" : "大娘子","age" : 18,"from" : "sheng","desc" : "肤白貌美,娇憨可爱","tags" : ["白","富","美"]}}]}
}

要查询fromguage25~30之间的怎么查?

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}}],"filter": {"range": {"age": {"gte": 25,"lte": 30}}}}}
}

上例中,使用ltegte来限定范围。结果如下:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 2,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "4","_score" : 0.6931472,"_source" : {"name" : "石头","age" : 29,"from" : "gu","desc" : "粗中有细,狐假虎威","tags" : ["粗","大","猛"]}},{"_index" : "lqz","_type" : "doc","_id" : "1","_score" : 0.2876821,"_source" : {"name" : "顾老二","age" : 30,"from" : "gu","desc" : "皮肤黑、武器长、性格直","tags" : ["黑","长","直"]}}]}
}

那么,要查询fromshengage小于等于25的怎么查呢?其实结果,我们可能已经想到了,只有一条,因为只有盛家小六符合结果。

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "sheng"}}],"filter": {"range": {"age": {"lte": 25}}}}}
}

结果果然不出洒家所料!

{"took" : 0,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 1,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "2","_score" : 0.6931472,"_source" : {"name" : "大娘子","age" : 18,"from" : "sheng","desc" : "肤白貌美,娇憨可爱","tags" : ["白","富","美"]}}]}
}

但是,洒家手一抖,将must换为should看看会发生什么?

GET lqz/doc/_search
{"query": {"bool": {"should": [{"match": {"from": "sheng"}}],"filter": {"range": {"age": {"lte": 25}}}}}
}

结果如下:

{"took" : 1,"timed_out" : false,"_shards" : {"total" : 5,"successful" : 5,"skipped" : 0,"failed" : 0},"hits" : {"total" : 3,"max_score" : 0.6931472,"hits" : [{"_index" : "lqz","_type" : "doc","_id" : "2","_score" : 0.6931472,"_source" : {"name" : "大娘子","age" : 18,"from" : "sheng","desc" : "肤白貌美,娇憨可爱","tags" : ["白","富","美"]}},{"_index" : "lqz","_type" : "doc","_id" : "5","_score" : 0.0,"_source" : {"name" : "魏行首","age" : 25,"from" : "广云台","desc" : "仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!","tags" : ["闭月","羞花"]}},{"_index" : "lqz","_type" : "doc","_id" : "3","_score" : 0.0,"_source" : {"name" : "龙套偏房","age" : 22,"from" : "gu","desc" : "mmp,没怎么看,不知道怎么形容","tags" : ["造数据","真","难"]}}]}
}

结果有点出乎意料,因为龙套偏房和魏行首不属于盛家,但也被查询出来了。那你要问了,怎么肥四?小老弟!这是因为在查询过程中,优先经过filter过滤,因为should是或关系,龙套偏房和魏行首的年龄符合了filter过滤条件,也就被放行了!所以,如果在filter过滤条件中使用should的话,结果可能不会尽如人意!建议使用must代替

注意:filter工作于bool查询内。比如我们将刚才的查询条件改一下,把filterbool中挪出来。

GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "sheng"}}]},"filter": {"range": {"age": {"lte": 25}}}}
}

如上例所示,我们将filterbool平级,看查询结果:

{"error": {"root_cause": [{"type": "parsing_exception","reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line": 12,"col": 5}],"type": "parsing_exception","reason": "[bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]","line": 12,"col": 5},"status": 400
}

结果报错了!所以,filter工作位置很重要。

小结:

  • must:与关系,相当于关系型数据库中的and
  • should:或关系,相当于关系型数据库中的or
  • must_not:非关系,相当于关系型数据库中的not
  • filter:过滤条件。
  • range:条件筛选范围。
  • gt:大于,相当于关系型数据库中的>
  • gte:大于等于,相当于关系型数据库中的>=
  • lt:小于,相当于关系型数据库中的<
  • lte:小于等于,相当于关系型数据库中的<=

查询结果 过滤:_source

在未来,一篇文档可能有很多的字段,每次查询都默认给我们返回全部,在数据量很大的时候,是的,比如我只想查姑娘的手机号,你一并给我个喜好啊、三围什么的算什么?
所以,我们对结果做一些过滤,清清白白的告诉elasticsearch

GET books/doc/_search
{"query": {"match": {"name":"顾老二"}}
}GET books/doc/_search
{"query": {"match": {"name":"顾老二"}},"_source": ["name","age"]
}

高亮显示

如果返回的结果集中很多符合条件的结果,那怎么能一眼就能看到我们想要的那个结果呢?比如下面网站所示的那样,我们搜索elasticsearch,在结果集中,将所有elasticsearch高亮显示?

如上图我们搜索一样。我们该怎么做呢?

GET books/doc/_search
{"query": {"match": {"tags": "粗"}},"highlight": {"fields": {"from":{},"tags":{}}}
}

上例中,我们使用highlight属性来实现结果高亮显示,需要的字段名称添加到fields内即可,elasticsearch会自动帮我们实现高亮。

自定义高亮显示

但是,你可能会问,我不想用em标签, 我这么牛逼,应该用个b标签啊!好的,elasticsearch同样考虑到你很牛逼,所以,我们可以自定义标签。

GET books/doc/_search
{"query": {"match": {"from": "gu"}},"highlight": {"pre_tags": "<b class='key' style='color:red'>",  # 在结果之前"post_tags": "</b>",  # 在结果之后"fields": {"from": {}}}
}

上例中,在highlight中,pre_tags用来实现我们的自定义标签的前半部分,在这里,我们也可以为自定义的标签添加属性和样式。post_tags实现标签的后半部分,组成一个完整的标签。至于标签中的内容,则还是交给fields来完成。

聚合函数

聚合函数大家都不陌生,elasticsearch中也没玩出新花样,所以,这一章相对简单,只需要记得:

  • avg
  • max
  • min
  • sum

以及各自的用法即可。先来看求平均。

svg

GET books/doc/_search
{"query": {"match": {"from": "gu"}},"aggs": {  # 聚合函数aggressive"my_avg": {  # 结果别名"avg": {  # 聚合方法"field": "age"  # 字段}}},"_source": ["name", "age"]  # 过滤
}

max,min.sum

  "aggs": {  # 聚合函数aggressive"my_max": {  # 结果别名"max": {  # 聚合方法"field": "age"  # 字段}}},"aggs": {  # 聚合函数aggressive"my_min": {  # 结果别名"min": {  # 聚合方法"field": "age"  # 字段}}},"aggs": {  # 聚合函数aggressive"my_sum": {  # 结果别名"sum": {  # 聚合方法"field": "age"  # 字段}}},

分组查询

现在我想要查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。

分析需求,首先我们应该先把分组做出来。

GET books/doc/_search
{"size": 0, "query": {"match_all": {}},"aggs": {"age_group": {"range": {"field": "age","ranges": [{"from": 15,"to": 20},{"from": 20,"to": 25},{"from": 25,"to": 30}]}}}
}

上例中,在aggs的自定义别名age_group中,使用range来做分组,field是以age为分组,分组使用ranges来做,fromto是范围,我们根据需求做出三组。

现在我想要查询所有人的年龄段,并且按照15~20,20~25,25~30分组,并且算出每组的平均年龄。

分析需求,首先我们应该先把分组做出来。

返回的结果中可以看到,已经拿到了三个分组。doc_count为该组内有几条数据,此次共分为三组,查询出4条内容。还有一条数据的age属性值是30,不在分组的范围内!

那么接下来,我们就要对每个小组内的数据做平均年龄处理。

GET books/doc/_search
{"size": 0, "query": {"match_all": {}},"aggs": {"age_group": {"range": {"field": "age","ranges": [{"from": 15,"to": 20},{"from": 20,"to": 25},{"from": 25,"to": 30}]},"aggs": {"my_avg": {"avg": {"field": "age"}}}}}
}

上例中,在分组下面,我们使用aggsage做平均数处理,这样就可以了。

在结果中,我们可以清晰的看到每组的平均年龄(my_avgvalue中)。

注意:聚合函数的使用,一定是先查出结果,然后对结果使用聚合函数做处理

小结:

  • avg:求平均
  • max:最大值
  • min:最小值
  • sum:求和

欢迎斧正,that’s all

IK中文分词器

#1 github下载相应版本
https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v7.5.2

2 解压到es的plugin目录下

3 重启es

ik_max_word 和 ik_smart 什么区别?

ik_max_word: 会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种 可能的组合,适合 Term Query;

ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,适合 Phrase 查询。

GET _analyze
{"analyzer": "ik_max_word","text": "上海自来水来自海上"
}
# text字段会分词,keyword不会分词。所以在建立i、映射关系(mapping)要先想好这个字段需不需要细分

ES-查询相关和IK分词器相关推荐

  1. ES集群添加IK分词器

    ES集群添加IK分词器 ES : 7.5.0 官方文档其实已经够优秀了,毕竟是中文的,这里只给出一些建议. IKAnalyzer.cfg.xml 建议放到插件的目录下,要不然有可能会有一些问题 {pl ...

  2. es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器

    一.资源准备 远程服务器一个(本教程为CentOS 64位) 注:ik分词器版本需与es版本统一 jdk1.8.0 elasticsearch-head-master.zip 二.开放端口 注:本例采 ...

  3. Docker 安装 ES 7.7.0 及 Head、Kibana、IK分词器、Logstash、Filebeat 插件

    目录 环境信息 ES安装 ElasticSearch-Head安装 IK分词器安装 环境信息 Docker version 1.13.1, build 4ef4b30/1.13.1 CentOS Li ...

  4. Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装

    一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...

  5. 狂神聊 ElasticSearch(IK分词器+Rest+集成SpringBoot+实战爬虫项目+完整代码及资料)

    Bilibili 搜索关注:狂神说 Java(和狂神一起学习,共同进步) 公众号:狂神说(文章日更) 狂神聊 ElasticSearch 版本:ElasticSearch 7.6.1(全网最新了) 6 ...

  6. 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用

    使用Docker 安装Elasticsearch.Elasticsearch-head.IK分词器 和使用 原文:使用Docker 安装Elasticsearch.Elasticsearch-head ...

  7. Elasticsearch(二) ik分词器的安装 以及 自定义分词

    ik分词器作为elasticsearch的一个插件,则是安装在es插件中. ik分词器的安装 1,创建ik分词目录上传与es相同版本的ik分词器插件,不同版本可能es启动 报错 在elasticsea ...

  8. Linux下安装ik分词器

    Linux下安装ik分词器 首先下载ik分词器 下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases 一定要点进来 下载z ...

  9. 拾忆Elasticsearch01:Elasticsearch概述及相关ES、IK分词器等下载安装

    为了防止老年痴呆记不住学过的Elasticsearch,在这里写点blog回顾一下 写在前面,建议下载以下出现的Elasticsearch版本,我之前下的7.6.1在这里找不到对应的springboo ...

最新文章

  1. 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解
  2. Android GUI之View测量
  3. 机器人流程自动化技术的新发展
  4. php i o优化,PHP之高性能I/O框架:Libevent(一)
  5. Android PC投屏简单尝试—最终章2
  6. C#知识点总结系列:C# 数据结构
  7. java依赖注入_Java依赖注入选项
  8. juyter显示决策树图形_决策树分析细分市场
  9. docker: Error response from daemon: driver failed programming external connectivity
  10. python3.3 连接mysql_python3.3连接mysql数据库
  11. leetCode-995:K 连续位的最小翻转次数
  12. zedboard板子上呼吸灯的实现(第一版)仿真代码的实现
  13. 安装windowx64-mysql
  14. 在NodeJS中使用Redis缓存数据
  15. 【优化算法】多目标蜻蜓优化算法(MODA)【含Matlab源码 1350期】
  16. java程序员面试真题及详解2017(纯手动)
  17. ARM上移植ser2net源码
  18. 18.06.27 16年期末11:张三丰的传人
  19. js从地址栏获取参数
  20. 联网门锁·未来可期|专访中科易安教育行业事业部CSO聂辛

热门文章

  1. 云运维的启示与架构设计
  2. excel一列中某一数据第一次出现的位置(使用match实现)
  3. corejava11(第一章)
  4. 在动态规划的海洋中遨游(二)
  5. UEFI BIOS —— SEC阶段分析
  6. SAP ABAP 创建 ALV 报表详细教程含示例
  7. Python的len()函数
  8. 网上投票作弊的技术实现(纯技术交流,勿用作他途!!)
  9. 华为手机7个超实用的功能,关键时刻帮你大忙,赶紧开启吧!
  10. 小微支付平台,支付宝/微信聚合支付