子条件查询:以特定字段查询所指定值
Query context
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来表示匹配的程度,旨在判断目标文档和查询条件匹配的有多好
-
全文本查询 针对文本类型数据
-
字段级别查询 针对结构化数据,如数字,日期等
-
模糊匹配
由于分词的原因,title中包含测试、项目、测试项目都会被查询出来
{
"query":{
"match":{
"title":"测试项目"
}
}
}
- 习语查询
要想查询包含测试项目这个整体的,应当使用习语查询
{
"query":{
"match_phrase":{
"title":"测试项目"
}
}
}
- 多字段查询
{
"query":{
"multi_match":{
"query":"爬虫",
"fields":["title","body"]
}
}
}
- 语法查询 query_string
//查询title中包含 抖音和测试 或者 百度的文档
{
"query":{
"query_string":{
"fields":["title"],
"query":"(抖音 AND 测试) OR 百度"
}
}
}
- term 特定值查询
{
"query":{
"term":{
"id":6
}
}
}
- range 范围查询
// id 大于等10 小于等于20
{
"query":{
"range":{
"id":{
"gte":10,
"lte":20
}
}
}
}
// 日期查询
{
"query":{
"range":{
"pub_date":{
"gte":"2019-11-01",
"lte":"now"
}
}
}
}
Filter context
在查询过程中,值判断该文档是否满足条件,只有YES和NO,没有_scroe排序。
需要结合bool关键词查询,查询速度较快。
{
"query":{
"bool":{
"filter":{
"match":{
"title":"抖音"
}
}
}
}
}
复合查询
- 固定分数查询
固定分数查询看起来简单,实际用起来却非常灵活,比如你电商产品,你可以提高某些商品的属性的评分,提高需要呈现给用户的商品的优先级
{
"query":{
"constant_score":{
"filter":{
"match":{
"title":"测试"
}
},
"boost":2
}
}
}
- 逻辑匹配
// author包含 wang 或者 status 为1 title必须包含 百度 最终再过滤出 count为1000的数据
{
"query":{
"bool":{
"should":[
{
"match":{
"author":"wang"
}
},
{
"match":{
"status":1
}
}
],
"must":[
{
"match":{
"title":"百度"
}
}
],
"filter":[{
"term":{
"count":1000
}
}]
}
}
}
// title 不包含百度的
{
"query":{
"bool":{
"must_not":{
"term":{
"title":"百度"
}
}
}
}
}