ES-查询相关和IK分词器
排序查询
创建数据
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字段按照降序,并且,我只想看nmae
和age
字段:
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
降序排序,查询所有。并且在查询的时候,添加两个属性from
和size
来控制查询结果集的数据条数。
- 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
包围,就是from
为gu
的所有数据。
这里需要注意的是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
的数据查询出来了。
那么,我们想要查询from
为gu
,并且age
为30
的数据怎么搞呢?
GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}},{"match": {"age": 30}}]}}
}
上例中,在must
列表中,在增加一个age
为30
的条件。
结果如下:
{"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
那么,如果要查询只要是from
为gu
或者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}}]}}
}
上例中,must
和should
都不能使用,而是使用must_not
,又在内增加了一个age
为18
的条件。
结果如下:
{"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
那么,如果要查询from
为gu
,age
大于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
的条件都已经筛选出来了。
那么要查询from
是gu
,age
大于等于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" : ["白","富","美"]}}]}
}
要查询from
是gu
,age
在25~30
之间的怎么查?
GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "gu"}}],"filter": {"range": {"age": {"gte": 25,"lte": 30}}}}}
}
上例中,使用lte
和gte
来限定范围。结果如下:
{"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" : ["黑","长","直"]}}]}
}
那么,要查询from
是sheng
,age
小于等于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
查询内。比如我们将刚才的查询条件改一下,把filter
从bool
中挪出来。
GET lqz/doc/_search
{"query": {"bool": {"must": [{"match": {"from": "sheng"}}]},"filter": {"range": {"age": {"lte": 25}}}}
}
如上例所示,我们将filter
与bool
平级,看查询结果:
{"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
来做,from
和to
是范围,我们根据需求做出三组。
现在我想要查询所有人的年龄段,并且按照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"}}}}}
}
上例中,在分组下面,我们使用aggs
对age
做平均数处理,这样就可以了。
在结果中,我们可以清晰的看到每组的平均年龄(my_avg
的value
中)。
注意:聚合函数的使用,一定是先查出结果,然后对结果使用聚合函数做处理
小结:
- avg:求平均
- max:最大值
- min:最小值
- sum:求和
欢迎斧正,that’s all
IK中文分词器
#1 github下载相应版本
https://github.com/medcl/elasticsearch-analysis-ik/releases?after=v7.5.22 解压到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分词器相关推荐
- ES集群添加IK分词器
ES集群添加IK分词器 ES : 7.5.0 官方文档其实已经够优秀了,毕竟是中文的,这里只给出一些建议. IKAnalyzer.cfg.xml 建议放到插件的目录下,要不然有可能会有一些问题 {pl ...
- es安全组端口_从零开始在远程服务器(Linux)上搭建es,eshead和ik分词器
一.资源准备 远程服务器一个(本教程为CentOS 64位) 注:ik分词器版本需与es版本统一 jdk1.8.0 elasticsearch-head-master.zip 二.开放端口 注:本例采 ...
- 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 ...
- Elasticsearch+elasticsearch-head的安装+Kibana环境搭建+ik分词器安装
一.安装JDK1.8 二.安装ES 三个节点:master.slave01.slave02 1.这里下载的是elasticsearch-6.3.1.rpm版本包 https://www.elastic ...
- 狂神聊 ElasticSearch(IK分词器+Rest+集成SpringBoot+实战爬虫项目+完整代码及资料)
Bilibili 搜索关注:狂神说 Java(和狂神一起学习,共同进步) 公众号:狂神说(文章日更) 狂神聊 ElasticSearch 版本:ElasticSearch 7.6.1(全网最新了) 6 ...
- 使用Docker 安装Elasticsearch、Elasticsearch-head、IK分词器 和使用
使用Docker 安装Elasticsearch.Elasticsearch-head.IK分词器 和使用 原文:使用Docker 安装Elasticsearch.Elasticsearch-head ...
- Elasticsearch(二) ik分词器的安装 以及 自定义分词
ik分词器作为elasticsearch的一个插件,则是安装在es插件中. ik分词器的安装 1,创建ik分词目录上传与es相同版本的ik分词器插件,不同版本可能es启动 报错 在elasticsea ...
- Linux下安装ik分词器
Linux下安装ik分词器 首先下载ik分词器 下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases 一定要点进来 下载z ...
- 拾忆Elasticsearch01:Elasticsearch概述及相关ES、IK分词器等下载安装
为了防止老年痴呆记不住学过的Elasticsearch,在这里写点blog回顾一下 写在前面,建议下载以下出现的Elasticsearch版本,我之前下的7.6.1在这里找不到对应的springboo ...
最新文章
- 矩阵奇异值分解特征值分解_推荐系统中的奇异值分解与矩阵分解
- Android GUI之View测量
- 机器人流程自动化技术的新发展
- php i o优化,PHP之高性能I/O框架:Libevent(一)
- Android PC投屏简单尝试—最终章2
- C#知识点总结系列:C# 数据结构
- java依赖注入_Java依赖注入选项
- juyter显示决策树图形_决策树分析细分市场
- docker: Error response from daemon: driver failed programming external connectivity
- python3.3 连接mysql_python3.3连接mysql数据库
- leetCode-995:K 连续位的最小翻转次数
- zedboard板子上呼吸灯的实现(第一版)仿真代码的实现
- 安装windowx64-mysql
- 在NodeJS中使用Redis缓存数据
- 【优化算法】多目标蜻蜓优化算法(MODA)【含Matlab源码 1350期】
- java程序员面试真题及详解2017(纯手动)
- ARM上移植ser2net源码
- 18.06.27 16年期末11:张三丰的传人
- js从地址栏获取参数
- 联网门锁·未来可期|专访中科易安教育行业事业部CSO聂辛