听闻少年二字,当与平庸相斥。这篇文章主要讲述git,es的基本查询,组合查询,mapping映射,i分词,term和match相关的知识,希望能为你提供帮助。
git
# 1 你们公司用的github,码云,还是gitlab?
# 2 公司用github?
# 3 协同开发,要上远程仓库(github,码云,还是gitlab)
# 4 中小型公司,放到码云上,公司没有实力搭一个gitlab,相关技术人员,自己没有服务器
# 5 你们公司,写了一个价值1千万的项目,那把它放到码云上,公司放心吗?第三方
# 6 自己搭git仓库,gitlab,免费开源的git仓库,公司自己服务器,# 7 刚开始用svn,用git,bitbucket,一个仓库不能超过2g,ios那边# 8 禅道,自己自有的,协同管理平台
# 9 你写好代码,提到git上,新员工,公司1kw的项目,敢不敢信任你的代码,有人去给你看,# 10 项目已经写好了,测试人测出bug来了,在协同管理平台提交bug,----》上级领导---》看到它提的bug----》转给你----》最显眼的位置,---》正在解决(变绿)---》点已解决---》测试那看到了---》# 11 你在开发中,遇到冲突怎么办?
-两种情况会出现冲突:
-多个人在同一个分支上开发,两个人改了同一行代码,先提交的人没问题,后提交的会出冲突
-合并分支的时候出现冲突 # 12 pycharm实操冲突及解决(大部分都不用命令,pycharm点点点)
用两个账号,这两个问题都重现一下(在码云上)# 你的代码多久提交一次---》一个功能写完了,测着没问题提交一下,都个人用同一个分支开发,你要时不时的pull---》
2 es基本查询
# 1 排序
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
sort"
: [
{
"
age"
: {
"
order"
: "
desc"
}
}
]
}
# 升序
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
sort"
: [
{
"
age"
: {
"
order"
: "
asc"
}
}
]
}# 并不是所有类型都支持排序(只允许数字类型做排序)
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
sort"
: [
{
"
name"
: {
"
order"
: "
asc"
}
}
]
}
# match和match_all的区别?
mach表示要查询,根据字段查,match_all查所有
GET lqz/doc/_search
{
"
query"
: {
"
match_all"
: {}
}
}#2 分页
GET lqz/doc/_search
{
"
query"
: {
"
match_all"
: {}
},
"
sort"
: [
{
"
age"
: {
"
order"
: "
desc"
}
}
],
"
from"
: 2,
"
size"
: 1
}
#"
from"
: 2,代表从第二条开始, 取一条"
size"
: 1# 有了这个查询,如何分页?
一页有10条数据
第一页:
"
from"
: 0,
"
size"
: 10
第二页:
"
from"
: 10,
"
size"
: 10
第三页:
"
from"
: 20,
"
size"
: 10
3 es 组合查询
# 多个条件,and ,or ,not
# 对到es中就是布尔查询,must,should,must_not,filter# 1 组合查询之must
# 查询form gu和age=30的数据
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
must"
: [
{
"
match"
: {
"
from"
: "
gu"
}
},
{
"
match"
: {
"
age"
: "
30"
}
}
]
}
}
}
# 查询form gu数据()
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
must"
: [
{
"
match"
: {
"
from"
: "
gu"
}
}
]
}
}
}
# 同上
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
}
}# 2 组合查询之should,或者的条件
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
should"
: [
{
"
match"
: {
"
from"
: "
gu"
}
},
{
"
match"
: {
"
tags"
: "
闭月"
}
}
]
}
}
}
# 3 组合查询之must_not取反
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
must_not"
: [
{
"
match"
: {
"
from"
: "
gu"
}
},
{
"
match"
: {
"
tags"
: "
可爱"
}
},
{
"
match"
: {
"
age"
: 18
}
}
]
}
}
}
# `filter`条件过滤查询,过滤条件的范围用`range`表示,`gt`表示大于,大于多少呢
# gt:大于lt:小于get:大于等于let:小于等于
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
must"
: [
{
"
match"
: {
"
from"
: "
gu"
}
}
],
"
filter"
: {
"
range"
: {
"
age"
: {
"
gt"
: 25
}
}
}
}
}
}
# 查询年龄小于等于18的所有数据
GET lqz/doc/_search
{
"
query"
: {
"
bool"
: {
"
filter"
: {
"
range"
: {
"
age"
: {
"
lte"
: 18
}
}
}
}
}
}
# 2 对结果进行过滤,类似于如下
select * from user;
select name,age from user;
# 对应到es的查询
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
name"
: "
顾老二"
}
},
"
_source"
: ["
name"
, "
age"
]
}
# 3 结果高亮显示(默认情况)
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
name"
: "
石头"
}
},
"
highlight"
: {
"
fields"
: {
"
name"
: {}
}
}
}
# 定制高亮显示的样式
GET lqz/chengyuan/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
highlight"
: {
"
pre_tags"
: "
<
b class=‘key‘ style=‘color:red‘>
"
,
"
post_tags"
: "
<
/b>
"
,
"
fields"
: {
"
from"
: {}
}
}
}
# 总结:
混合开发,你知道怎么处理
前后端分离,你怎么处理?<
b class=‘key‘ style=‘color:red‘>
串直接以josn格式返回,前端自行渲染 # 用的最多就是match+布尔+高亮+分页
# 聚合查询
# 1 聚合查询之avg
select max(age) as my_avg from user;
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
aggs"
: {
"
my_avg"
: {
"
avg"
: {
"
field"
: "
age"
}
}
},
"
_source"
: ["
name"
, "
age"
]
}
# 2 聚合查询之max,size=0表示不取数据,只要max的结果
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
aggs"
: {
"
my_max"
: {
"
max"
: {
"
field"
: "
age"
}
}
},
"
size"
: 0
}
# 3 聚合之min
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
aggs"
: {
"
my_min"
: {
"
min"
: {
"
field"
: "
age"
}
}
},
"
size"
: 0
}
# 4 聚合查询之sum
GET lqz/doc/_search
{
"
query"
: {
"
match"
: {
"
from"
: "
gu"
}
},
"
aggs"
: {
"
my_sum"
: {
"
sum"
: {
"
field"
: "
age"
}
}
},
"
size"
: 0
}# 5 聚合之分组
GET lqz/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
}
]
}
}
}
}
4 mapping介绍
# 查看索引信息---》mapping字典---》映射(类型,表类型,表结构)
GET lqz
# 6.x以后一个索引只能有一个映射类型(只能有一个表)
# 创建映射
# 创建索引,并设置映射
PUT books
{
"
mappings"
: {
"
properties"
:{
"
title"
:{
"
type"
:"
text"
,
"
analyzer"
: "
ik_max_word"
},
"
price"
:{
"
type"
:"
integer"
},
"
addr"
:{
"
type"
:"
keyword"
},
"
company"
:{
"
properties"
:{
"
name"
:{"
type"
:"
text"
},
"
company_addr"
:{"
type"
:"
text"
},
"
employee_count"
:{"
type"
:"
integer"
}
}
},
"
publish_date"
:{"
type"
:"
date"
,"
format"
:"
yyy-MM-dd"
}}}
}
# 插入测试数据
PUT books/_doc/1
{
"
title"
:"
大头儿子小偷爸爸"
,
"
price"
:100,
"
addr"
:"
北京天安门"
,
"
company"
:{
"
name"
:"
我爱北京天安门"
,
"
company_addr"
:"
我的家在东北松花江傻姑娘"
,
"
employee_count"
:10
},
"
publish_date"
:"
2019-08-19"
}PUT books/_doc/2
{
"
title"
:"
白雪公主和十个小矮人"
,
"
price"
:"
99"
,
"
addr"
:"
黑暗森里"
,
"
company"
:{
"
name"
:"
我的家乡在上海"
,
"
company_addr"
:"
朋友一生一起走"
,
"
employee_count"
:10
},
"
publish_date"
:"
2018-05-19"
}PUT books/_doc/3
{
"
title"
:"
白雪公主和十个小矮人"
,
"
price"
:"
99"
,
"
addr"
:"
黑暗森里"
,
"
age"
:18
}
# 查看映射
GET books
GET books/_mapping# 映射是什么?映射有什么用?规定了表结构(不是强制的),规定了哪个字段是可以用来全文检索,是否是数字类型,布尔类型
# mapping类型一旦确定,以后就不能修改了,但是可以插入字段
5 ik分词【git,es的基本查询,组合查询,mapping映射,i分词,term和match】
# 全文检索,有了映射,决定了我可以对某个字段做全文检索
# es默认分词对英文友好,使用中文分词器(es的插件),ik(作者,中国人,elasticsearch开源社区负责人)# 是es的一个插件(es如何安装插件)
- 第一种:命令行(内置插件)
bin/elasticsearch-plugin install analysis-smartcn安装中文分词器
-第二种:url安装(第三方插件)
bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.5.0/elasticsearch-analysis-ik-7.5.0.zip
-第三种:手动安装(推荐用)
-下载,解压到es的plugins路径下,重启es即可
-注意:ik分词器跟es版本一定要对应# 两种分词方式
# ik_smart:分词分的
# ik_max_word :分词分的多# ik_smart分的词少,粒度大
GET _analyze
{
"
analyzer"
: "
ik_smart"
,
"
text"
: "
上海自来水来自海上"
}
# ik_smart分的词多,粒度小
GET _analyze
{
"
analyzer"
: "
ik_max_word"
,
"
text"
: "
上海自来水来自海上"
}# 在创建映射的时候配置
# 以后你的操作:
-文章标题:ik_max_word
-文章内容:ik_smart
-摘要
-作者
-创建时间
6 term和match的区别
# match:我们今天出去玩 ----》分词---》按分词去搜
#term:我们今天出去玩---》直接拿着[我们今天出去玩]--->
去索引中查询# 查不到内容,直接拿着python爬虫 去查,因为没有索引,所以查不到
GET books/_search
{
"
query"
:{
"
term"
:{
"
title"
:"
Python爬虫"
}
}
}
# 能查到,而且带python的都查出来了
# Python爬虫分了词,分别拿着这两个词去查,带python关键字,带爬虫关键字都能查到
GET books/_search
{
"
query"
:{
"
match"
:{
"
title"
:"
Python爬虫"
}
}
}
推荐阅读
- 使用MyBatis的mapper接口(动态代理对象)调用时的注意点
- [Blazor] - 关于 "HTTP Error 500.38 - ANCM Application DLL Not Found" 的调整及相关资料
- 理解并测试什么是Android事件分发
- multipart/form-data和application/x-www-form-urlencoded的区别
- Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
- NetCore+Dapper WebApi架构搭建(仓储的依赖注入)
- Android应用的persistent属性
- 安卓测试
- RichFaces rich(fileUpload组件用法)