es查询所欲_elasticsearch之查询的两种方式

前言

简单的没挑战,来点复杂的,比如查看来自顾家的都有哪些人怎么查呢?elasticsearch提供两种查询方式:

查询字符串(query string),简单查询,就像是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索。

另外一种是通过DSL语句来进行查询,被称为DSL查询(Query DSL),DSL是Elasticsearch提供的一种丰富且灵活的查询语言,该语言以json请求体的形式出现,通过restful请求与Elasticsearch进行交互。

准备数据

PUT zhifou/doc/1

{

"name":"顾老二",

"age":30,

"from": "gu",

"desc": "皮肤黑、武器长、性格直",

"tags": ["黑", "长", "直"]

}

PUT zhifou/doc/2

{

"name":"大娘子",

"age":18,

"from":"sheng",

"desc":"肤白貌美,娇憨可爱",

"tags":["白", "富","美"]

}

PUT zhifou/doc/3

{

"name":"龙套偏房",

"age":22,

"from":"gu",

"desc":"mmp,没怎么看,不知道怎么形容",

"tags":["造数据", "真","难"]

}

PUT zhifou/doc/4

{

"name":"石头",

"age":29,

"from":"gu",

"desc":"粗中有细,狐假虎威",

"tags":["粗", "大","猛"]

}

PUT zhifou/doc/5

{

"name":"魏行首",

"age":25,

"from":"广云台",

"desc":"仿佛兮若轻云之蔽月,飘飘兮若流风之回雪,mmp,最后竟然没有嫁给顾老二!",

"tags":["闭月","羞花"]

}

查询字符串

GET zhifou/doc/_search?q=from:gu

还是使用GET命令,通过_serarch查询,查询条件是什么呢?条件是from属性是gu家的人都有哪些。最后,别忘了_search和from属性中间的英文分隔符?。

结果如下:

{

"took" : 1,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : 3,

"max_score" : 0.6931472,

"hits" : [

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "4",

"_score" : 0.6931472,

"_source" : {

"name" : "石头",

"age" : 29,

"from" : "gu",

"desc" : "粗中有细,狐假虎威",

"tags" : [

"粗",

"大",

"猛"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "1",

"_score" : 0.2876821,

"_source" : {

"name" : "顾老二",

"age" : 30,

"from" : "gu",

"desc" : "皮肤黑、武器长、性格直",

"tags" : [

"黑",

"长",

"直"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "3",

"_score" : 0.2876821,

"_source" : {

"name" : "龙套偏房",

"age" : 22,

"from" : "gu",

"desc" : "mmp,没怎么看,不知道怎么形容",

"tags" : [

"造数据",

"真",

"难"

]

}

}

]

}

}

我们来重点说下hits,hits是返回的结果集——所有from属性为gu的结果集。重点中的重点是_score得分,得分是什么呢?根据算法算出跟查询条件的匹配度,匹配度高得分就高。后面再说这个算法是怎么回事。

结构化查询

我们现在使用DSL方式,来完成刚才的查询,查看来自顾家的都有哪些人。

GET zhifou/doc/_search

{

"query": {

"match": {

"from": "gu"

}

}

}

上例,查询条件是一步步构建出来的,将查询条件添加到match中即可,而match则是查询所有from字段的值中含有gu的结果就会返回。

当然结果没啥变化:

{

"took" : 0,

"timed_out" : false,

"_shards" : {

"total" : 5,

"successful" : 5,

"skipped" : 0,

"failed" : 0

},

"hits" : {

"total" : 3,

"max_score" : 0.6931472,

"hits" : [

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "4",

"_score" : 0.6931472,

"_source" : {

"name" : "石头",

"age" : 29,

"from" : "gu",

"desc" : "粗中有细,狐假虎威",

"tags" : [

"粗",

"大",

"猛"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "1",

"_score" : 0.2876821,

"_source" : {

"name" : "顾老二",

"age" : 30,

"from" : "gu",

"desc" : "皮肤黑、武器长、性格直",

"tags" : [

"黑",

"长",

"直"

]

}

},

{

"_index" : "zhifou",

"_type" : "doc",

"_id" : "3",

"_score" : 0.2876821,

"_source" : {

"name" : "龙套偏房",

"age" : 22,

"from" : "gu",

"desc" : "mmp,没怎么看,不知道怎么形容",

"tags" : [

"造数据",

"真",

"难"

]

}

}

]

}

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值