Elasticsearch 基本查询和组合查询


Posted in Python onApril 19, 2022

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>1614221216
GET 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=20
GET 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之基本查询及组合查询操作示例的详细内容!

Python 相关文章推荐
Python生成随机数的方法
Jan 14 Python
使用Python读写文本文件及编写简单的文本编辑器
Mar 11 Python
Python 对象中的数据类型
May 13 Python
深入浅析python with语句简介
Apr 11 Python
利用Pandas读取文件路径或文件名称包含中文的csv文件方法
Jul 04 Python
pandas去除重复列的实现方法
Jan 29 Python
运用Python的webbrowser实现定时打开特定网页
Feb 21 Python
我们为什么要减少Python中循环的使用
Jul 10 Python
pytorch 输出中间层特征的实例
Aug 17 Python
python默认参数调用方法解析
Feb 09 Python
Python基础之教你怎么在M1系统上使用pandas
May 08 Python
Python基础知识学习之类的继承
May 31 Python
Elasticsearch 批量操作
Apr 19 #Python
Elasticsearch 数据类型及管理
Apr 19 #Python
Elasticsearch 索引操作和增删改查
Apr 19 #Python
python中redis包操作数据库的教程
Apr 19 #Python
python中pymysql包操作数据库方法
Apr 19 #Python
Python中Schedule模块使用详解 周期任务神器
Apr 19 #Python
python中urllib包的网络请求教程
Apr 19 #Python
You might like
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
微信支付开发订单查询实例
2016/07/12 PHP
js获取div高度的代码
2008/08/09 Javascript
直接在JS里创建JSON数据然后遍历使用
2014/07/25 Javascript
jQuery 判断图片是否加载完成方法汇总
2015/08/10 Javascript
BootStrap中Tab页签切换实例代码
2016/05/30 Javascript
JavaScript数据类型学习笔记分享
2016/09/01 Javascript
微信小程序 教程之注册页面
2016/10/17 Javascript
js实现年月日表单三级联动
2020/04/17 Javascript
javascript观察者模式实现自动刷新效果
2017/09/05 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
electron-vue开发环境内存泄漏问题汇总
2019/10/10 Javascript
js中switch语句的学习笔记
2020/03/25 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
解决vue bus.$emit触发第一次$on监听不到问题
2020/07/28 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
[14:50]2018DOTA2亚洲邀请赛开幕式
2018/04/03 DOTA
python实现的二叉树定义与遍历算法实例
2017/06/30 Python
Python爬取酷狗MP3音频的步骤
2021/02/26 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
html5使用canvas画一条线
2014/12/15 HTML / CSS
匡威英国官网:Converse英国
2018/12/02 全球购物
Ancheer官方户外和运动商店:销售电动自行车
2019/08/07 全球购物
软件测试面试题
2014/01/05 面试题
初中学生期末评语
2014/04/24 职场文书
毕业评语大全
2014/05/04 职场文书
我的中国梦演讲稿500字
2014/08/19 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
群众路线专项整治工作情况报告
2014/10/28 职场文书
检察院起诉书
2015/05/20 职场文书
2015民办小学年度工作总结
2015/05/26 职场文书
2015年新农村建设指导员工作总结
2015/07/24 职场文书
传单、海报早OUT了,另类传单营销方案送给你!
2019/07/15 职场文书