一、子条件查询
定义:特定字段查询所指特定值。
1、Query Context
在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来标识匹配的程度,旨在判断目标文档和查询条件匹配的有多好。
常用查询
- 全文本查询(针对文本类型数据)
精确查询:
{
"query": {
"match_phrase": {
"title": "Java入门"
}
}
}
多个字段模糊匹配查询:
{
"query": {
"multi_match": {
"query": "Mary",
"fields": ["author", "title"]
}
}
}
语法查询:
{
"query": {
"query_string": {
"query": "(Mary AND 对象) OR Java",
"fields": ["author", "title"]
}
}
}
- 字段级别查询(针对结构化数据,如数字、日期等)
{
"query": {
"term": {
"word_count": 2000
}
}
}
一定范围查询:
{
"query": {
"range": {
"word_count": {
"gte": 1000, # 大于等于
"lte": 2000 # 小于等于
}
}
}
}
2、Filter Context
在查询过程中,只判断该文档是否满足条件,只有Yes或者No。
{
"query": {
"bool": {
"filter": {
"term": {
"word_count": 1000
}
}
}
}
}
二、复合条件查询
定义:以一定的逻辑组合子条件查询。
1、固定分数查询
{
"query": {
"constant_score": { # 固定分数
"filter": {
"match": {
"word_count": 2000
}
},
"boost": 2 # 自定义分数值
}
}
}
2、布尔查询
只要满足其中的一个条件就可以:
{
"query": {
"bool": {
"should": [
{
"match": {
"author": "Mary"
}
},
{
"match": {
"title": "入门"
}
}
]
}
}
}
必须两个条件都满足:
{
"query": {
"bool": {
"must": [
{
"match": {
"author": "Mary"
}
},
{
"match": {
"title": "七月"
}
}
]
}
}
}
混合查询:
{
"query": {
"bool": {
"must": [
{
"match": {
"author": "Mary"
}
},
{
"match": {
"title": "七月"
}
}
],
"filter": [
{
"term": {
"word_count": 10000
}
}
]
}
}
}
must_not查询:
{
"query": {
"bool": {
"must_not": {
"term": {
"author": "Mary"
}
}
}
}
}