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
}
}
}
}
}
上一篇: oracle之DECODE()函数
下一篇: springboot的war和jar包
推荐阅读
-
SQL高级应用之使用SQL查询Excel表格数据的方法
-
揭密首个面向IaaS的查询语言:ZStack Query Language(ZQL)
-
ElasticStack学习(十):深入ElasticSearch搜索之QueryFiltering、多/单字符串的多字段查询
-
python数据库-mongoDB的高级查询操作(55)
-
python数据库-mongoDB的高级查询操作(55)
-
解决不能修改 Mysql 慢查询 long_query_time 值的问题
-
ES 21 - Elasticsearch的高级检索语法 (包括term、prefix、wildcard、fuzzy、boost等)
-
OracleSQL的高级查询、分页查询讲解
-
laravel技巧之查询构造器Query Builder叠加链式调用的方法
-
hibernate的Query查询的缓存的问题