欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch的Query高级查询

程序员文章站 2022-07-05 14:43:00
...

高级查询:

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
				}
			}
		}
	}
}