elasticsearch7.7.1自学笔记

一.新增文档

(不指定文档id,会随机生成一个id)

如果是7.x版本的es,不需要指定type,全部改成 _doc, _doc是默认的type类型

而且一个索引只有一个类型。

第一种。

post /index/type
{
    "field1":"value1",
    "field2":"value2"
}

第二种

put或者post /index/type/自定义文档id

{
    "field1":"value1",
    "field2":"value2"
}

二.修改文档

第一种,使用put新增的类型,需要指定文档,如果id在es中已存在,则视为更新,没有视为新增,更新将会覆盖掉对于id的文档下所有field的现有数据,如果新文档没指定字段的,将会被置空,所以用这种方式要写出所有的field,不建议使用。

put /index/type/id
{
    "field1":"value1"
    "field2":"value2"
    .....
}

第二种,使用post的方法,其中id是文档id

使用这种方式,只需要将修改的field和value写进去,其余的将不会变化,推荐使用。

post / index/type/{{Id}}/_update

{
  "doc":{
      "field":"value"
  }
}

三.查询文档

1.精确搜索,指定文档id

get /index/type/id

2.匹配搜索全部(不指定搜索内容,在最后加上_search即可,7.x版本的不需要指定type)

get /index/_search

3.指定搜索内容进行搜索,es7不需要指定type,以前版本自行加上(下面三种写法都可以)

第一种

get /index/_search?q=name:李四

第二种

get /index/_search?q=name=李四

第三种

 get /index/_search
​
{
​
"query":{
#这里的match还可以有别的很多类型
#还可以是must,相当于mysql的=,must_not必须不是,相当于mysql的不等于, should相当于mysql的or,
#可以使用bool来做多条件精确查询
   "match": {
       "name":"李四"
    },
    #新增过滤器,范围查询
    "filter":{
        "range":{
            "age":{
        #查询age字段大于等于10岁,并且小于20岁的数据
                "lt":20,
                "gte":10
            }
        }
    }
  },
    ##_source相当于mysql的select,结果过滤,过滤不需要的字段
    "_source":["name","desc"],
    ##使用sort来进行排序,可以指定多个排序方式
    "sort":[
        "age":{
            "order":"desc"
        }
    ],
    #from和size相当于mysql的limit的两个参数,从哪开始,查多少个数据
    "from":0,
    "size":10
}

四.各种搜索条件附加

搜索是es最重要的一个模块,所以关于搜索的dsl语句这块,多写了一点,后续会继续补充。

4.1  or和and 条件查询

需求:如果我们要获取people这个索引下,name属性是张三或者李四,或者必须包含张三李四的文档,那么我们可以这样写

#获取name含有张三或者李四的文档
get /people/_doc/_search
{
    "query":{
                "match":{
                            "name":"张三  李四"
                        }
            }
}


#获取name必须包含张三和李四的文档
get /people/_doc/_search
{
    "query":{
                "match":{
                            "name":{
                                    "query":"张三  李四",
                                    #这个属性默认是or,所以可以不写
                                    "operator":"and"
                                    }
                        }
            }
}

4.2 选择命中的词条个数

需求:搜索全部文档,文档的desc属性中必须包含(排球,运动,出汗)这三个关键字中的至少两个字的时候,才显示出来,这种情况下可以分析出满足要求的结果有四种,即1(排球,运动),2(运动,出汗),3(排球,出汗),4(排球,运动,出汗),这种情况下无法使用4.1中的or和and来进行一刀切处理,这种情况就可以使用4.2的方法进行处理。

#获取name含有张三或者李四的文档
get /people/_doc/_search
{
    "query":{
                "match":{
                            "desc":"排球  运动  出汗",
                            #至少匹配两个
                            "mininum_should_match":2
                        }
            }
}

其中,上面的"mininum_should_match":2表示至少满足两个搜索条件,也可以使用百分比来表示,比如排球,运动,出汗三个关键字,那么每个关键字的权重就是33.33%,如果设置"mininum_should_match":“34%”就代表只用匹配到的只要包含一个关键字就可以,大于66.66%表示必须包含两个及以上的关键字才可以,以此类推。

4.3 多属性条件的匹配

需求:上面针对了一个属性field的三种可能性进行了筛选,可能会出现多个属性的过滤。比如,查出name字段是张三,age字段是20,sex字段是man的三个条件中,满足其中两个以上的才显示出来,这个需求,就无法通过4.2实现。

#获取name字段是张三,age字段是20,sex字段是man三个条件中两个以上的所有文档
get /people/_doc/_search
{
	"query":{
		"bool":{
			"should":[
				{
				"match":{
					"name":"张三"
					}
				},
				{
				"match":{
					"age":20
					}
				},
				{
				"match":{
					"sex":"man"
					}
				}	
			],
			"mininum_should_match":2
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

却诚Salong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值