ElasticSearch的Query高级查询

高级查询:

1 子条件查询:特定字段查询所指特定值

1. Query Context:在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好(与查询的条件有多吻合)

a):全文本查询:针对文本类型数据

    ①:模糊匹配:关键词为 "match",缺点:例如查询条件为"于晨001",那么查询的条件则成了"于晨""001"有其一即可

{  
    "query":{  
        "match":{  
            "author":"于晨001"  
        }  
    }  
}  

   ②:模糊匹配_精确:关键词为"match_phrase",范围:例如查询条件为"于晨001",则会查询包含"于晨001"的所有字段

{
	"query":{
		"match_phrase":{
			"author":"于晨001"
		}
	}
}

   ③:模糊匹配_多个字段:关键词为"multi_match",范围:花括号内"query"表示查询的值,"fields"表示查询的范围,即在"author"和"title"中,这两个字段有一个满足即可

{
	"query":{
		"multi_match":{
			"query": "于晨",
			"fields": ["author","title"]
		}
	}
}

   ④:模糊匹配_语法查询:关键词为"query_string",查询包含"于晨""yuchen""es"的字段

{
	"query":{
		"query_string":{
			"query": "(于晨 and yuchen) or es"
		}
	}
}

   ⑤:模糊匹配_语法查询_多个字段:关键词为"query_string",查询包含"于晨""yuchen""es"的字段

{
	"query":{
		"query_string":{
			"query": "(于晨 and yuchen) or es",
			"fields": ["author","title"]
		}
	}
}

b):字段级别查询:针对结构化数据,比如:数字,日期等

   ①:结构化字段查询:关键词:"term",精确查询"author"字段的值是"于晨"

{
	"query":{
		"match":{
			"author":"于晨"
		}
	}
}

   ②:结构化字段查询_范围查询:关键词:"range",查询范围在0-5000,"get":大于等于,"lte":小于等于,其中e代表equals等于的意思,因此"gt"表示大于,"lt"表示小于,此方法也适用于日期范围的查询

{
	"query":{
		"range":{
			"word_count":{
				"gte":0,
				"lte":5000
			}
		}
	}
}

2. Filter Context:在查询过程中,只判断该文档是否满足条件,只有yes或no

    ①:Filter是做数据过滤的,es会对其结果进行缓存,因此比Query查询要快一些

{
	"query":{
		"bool":{
			"filter":{
				"term":{
					"word_count": 5000
				}
			}
		}
	}
}

2 复合条件查询:以一定的逻辑组合子条件查询

1. 固定分数查询

    ①:关键词:"constant_score":固定分数,插入的数据ES会进行一个评分,它查数据也是模糊查询,"boost":指定分数,"constant_score"不支持用"match"查询

{
	"query":{
		"constant_score":{
			"filter":{
				"match":{
					"author": "于晨001"
				}
			},
			"boost":"1"
		}
	}
}

2. 布尔查询

    ①:关键词:"bool":布尔查询,需要用到"should":应当满足,查询是 或 关系,满足其一即可,查询的时候也是模糊查询,当关键词为"must"时,关系为 与 关系,当关键词为"must_not"时,关系为 不能 关系,之后可以根据"filter"进行数据过滤

{
	"query":{
		"bool":{
			"must":[
				{
					"match":{
						"author":"于晨"
					}
				},
				{
					"match":{
						"wold_count": 2030
					}
				}
			],
			"filter":{
				"term":{
					"word_count":2000
				}
			}
		}
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值