文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Elasticsearch基本查询及组合查询实例分析

2023-06-30 06:08

关注

这篇文章主要介绍“Elasticsearch基本查询及组合查询实例分析”,在日常操作中,相信很多人在Elasticsearch基本查询及组合查询实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Elasticsearch基本查询及组合查询实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Elasticsearch查询

查询分类:

基本查询:使用es内置查询条件进行查询

组合查询:把多个查询组合在一起进行复合查询

过滤:查询的同时,通过filter条件在不影响打分的情况下筛选数据

一 基本查询

#添加映射PUT lago{  "mappings": {    "properties":{      "title":{        "stort":true,        "type":"text",        "analyzer":"ik_max_word"      },      "company_name":{         "stort":true,        "type":"keyword",      },      "desc":{        "type":"text"      },      "comments":{        "type":"integer"      },      "add_time":{        "type":"date",        "format":"yyy-MM-dd"      }    }  }}#测试数据POST lago/job{  "title":"python django 开发工程师",  "company_name":"美团科技有限公司",  "desc":"对django熟悉,掌握mysql和非关系型数据库,网站开发",  "comments:200,  "add_time":"2018-4-1"}POST lago/job{  "title":"python数据分析",  "company_name":"百度科技有限公司",  "desc":"熟悉python基础语法,熟悉数据分析",  "comments:5,  "add_time":"2018-10-1"}POST lago/job{  "title":"python自动化运维",  "company_name":"上海华为",  "desc":"熟悉python基础语法,精通Linux",  "comments:90,  "add_time":"2019-9-18"}
1.1 match查询
GET lagou/job/_search{  "query":{    "match":{      "title":"python"    }  }}#因为title字段做了分词,python都能搜索出来#搜索python网站也能搜索出来,把python和网站分成两个词#搜索爬取也能搜索到,把爬和取分词,去搜索#只搜取 搜不到
1.2 term查询
GET lagou/_search{  "query":{    "term":{      "title":"python"    }  }}#会拿着要查询的词不做任何处理,直接查询#用python爬虫,查不到,用match就能查到{  "query":{    "term":{      "company_name":"美团"    }  }}#通过美团,就查询不到
1.3 terms查询
GET lagou/_search{  "query":{    "terms":{      "title":["工程师","django","运维"]    }  }}#三个词,只要有一个,就会查询出来
1.4 控制查询的返回数量(分页)
GET lagou/_search{  "query":{    "match":{      "title":"python"    }  },  "form":1,  "size":2}#从第一条开始,大小为2
1.5 match_all 查询
GET lagou/_search{  "query":{    "match_all":{}  }}#所有数据都返回
1.6 match_phrase查询
GET lagou/_search{  "query":{    "match_phrase":{      "title":{        "query":"python系统",        "slop":6      }    }  }}#短语查询, #会把查询条件python和系统分词,放到列表中,再去搜索的时候,必须满足python和系统同时存在的才能搜出来#"slop":6 :python和系统这两个词之间最小的距离
1.7 multi_match
GET lagou/_search{  "query":{    "multy_match":{   "query":"python",      "fields":["title","desc"]    }  }}#可以指定多个字段#比如查询title和desc这个两个字段中包含python关键词的文档#"fields":["title^3","desc"]:权重,title中的python是desc中的三倍
1.8 指定返回的字段
GET lagou/_search{  "query":{    "stored_fields":["title","company_name"]    "match":{   "title":"python"    }  }}#只返回title和company_name字段#"stored_fields":["title","company_name",'dsc'],不会返回dsc,因为我们要求stroed_fields,之前desc字段设为false(默认),不会显示
1.9 sort 结果排序
GET lagou/_search{  "query":{ "match_all":{}  },  "sort":[    {      "comments":{        "order":"desc"      }    }  ]}#查询所有文档,按comments按desc降序排序
1.10 range范围查询
GET lagou/_search{  "query":{ "range":{        "comments":{          "gte":10,          "lte":20,          "boost":2.0        }      }  }}#指定comments字段大于等于10,小于等于20#boost:权重GET lagou/_search{  "query":{ "range":{        "add_time":{          "gte":"2019-10-11",          "lte":"now",        }      }  }}#对时间进行查询
1.11 wildcard查询
GET lagou/_search{  "query":{    "wildcard":{      "title":{        "value":"pyth*n",        "boost":2.0      }    }  }}#模糊查询,title中,有pyth任意值n得都能查出来
1.12 exists存在
exists:字段包含,存在的# 包含followers_count字段GET user_toutiao/_search{  "query": {      "bool": {        "must": [          {"exists": {            "field": "followers_count"          }}        ]      }  }}# 不包含followers_count字段GET user_toutiao/_count{  "query": {      "bool": {        "must_not": [          {"exists": {            "field": "followers_count"          }}        ]      }  }}# 不包含followers_count且updata_timestamp>1614221216GET user_toutiao/_count{  "query": {      "bool": {        "must_not": [          {            "exists": {              "field": "followers_count"            }          }        ],        "must": [          {"range": {            "updata_timestamp": {              "gt": 1614221216            }          }}        ]      }  }}

二 组合查询

2.1 bool查询
#bool查询包括must should must_not filter'''bool:{"filter":[],   字段过滤"must":[],     所有查询条件都满足"should":[],   满足一个或多个"must_not":{}  都不满足于must相反}'''# 建立测试数据POST lago/testjob/_bulk{"index":{"_id":1}}{"salary":10,"title":"Python"}{"index":{"_id":2}}{"salary":20,"title":"Scrapy"}{"index":{"_id":3}}{"salary":30,"title":"Django"}{"index":{"_id":4}}{"salary":30,"title":"Elasticsearch"}
2.2 简单过滤查询
#select * from testjob where salary=20GET lagou/testjob/_search{  "query":{    "bool":{        "must":{          "match_all":{}        },        "filter":{          "term":{            "salary":20          }        }      }  }}
2.3 查询多个值
#查询薪资是10k或20k的GET lagou/testjob/_search{  "query":{    "bool":{        "must":{          "match_all":{}        },        "filter":{          "terms":{            "salary":[10,20]          }        }      }  }}#select * from testjob where title="python"GET lagou/testjob/_search{  "query":{    "bool":{        "must":{          "match_all":{}        },        "filter":{          "term":{            "title":"Python"          }        }      }  }}#title 是text字段,会做大小写转换,term不会预处理,拿着大写Python去查查不到#可以改成小写,或者用match来查询'''   "filter":{          "match":{            "title":"Python"          }        }'''#查看分析器解析结果GET _analyze{  "analyzer":"ik_max_word",  "text":"python网络开发工程师"}
2.4 bool过滤查询,可以做组合过滤查询
#select * from testjob where (salary=20 or title=Python) and (salary!=30)#查询薪资等于20k或者工作为python的工作,排除价格为30k的{  "query":{    "bool":{      "should":[        {"term":{"salary":20}},        {"term":{"title":"python"}}      ],      "must_not":{        "term":{"salary":30}      }    }  }}#select * from testjob where title=python or (title=django and salary=30){  "query":{    "bool":{      "should":[        {"term":{"title":"python"}},        {          "bool":{            "must":[              {"term":{"title":"django"}},              {"term":{"salary":30}}            ]          }        }      ]    }  }}

到此,关于“Elasticsearch基本查询及组合查询实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯