elasticsearch简单查询语句

书中人 2022年03月15日 782次浏览

查询所有索引及其状态

host:port/_cat/indices?v&pretty

查询索引

host:port/index

条件查询

{
  "query": {
	 ## 全查询
     "match_all": { 
       }
	## 前缀查询
     "match_phrase_prefix":{ 
       "packages_name":"小熊美术年系统"
     }
	## 多字段查询
     "multi_match": { 
         "query": "小美",
         "fields": ["packages_name","username"],
         "type":"phrase" //设置这个字段type未phrase时就相当于短语查询,phrase_prefix相当于最左前缀查询
     }
	##  中文分词
     "match_phrase" :{ 
         "packages_name" : "小熊"
     }
  }
}

排序查询

{
    "query": {
        "match_all": {}
    },
    "sort": [
        {
            "comment_count": {
                "order": "desc"
            }
        }
    ]
}

分页查询

{
    "query": {
        "match_all": {
        }
    },
    "sort": {
        "comment_count": {
            "order": "desc"
        }
    },
    "from": 2,
    "size": 2
}

ES的bool查询 (must、should)

must 必须符合条件( must_not 不符合是条件)

{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "username": "小雪"
                    }
                },{
					"match": {
						"packages_name": "小熊美术年系统课"
					}
				}
            ]
        }
    }
}

should 多条件符合一个即可

{
	"query": {
		"bool": {
			"should": [
				{
					"match": {
						"packages_name":"消息"
					}
				},{
					"match": {
						"username": "小雪"
					}
				}
			]
		}
	}
}

filter(条件过滤查询,过滤条件的范围用range表示gt表示大于、lt表示小于、gte表示大于等于、lte表示小于等于)

{
	"query": {
		"bool": {
			"must": [
				{
					"match": {
						"packages_name": "小熊"
					}
				}
			],
			"filter": {
				"range": {
					"comment_count": {
						"gte": 6,
						"lt": 20
					}
				}
			}
		}
	}
}
bool查询总结
must:与关系,相当于关系型数据库中的 and。
should:或关系,相当于关系型数据库中的 or。
must_not:非关系,相当于关系型数据库中的 not。
filter:过滤条件。
range:条件筛选范围。
gt:大于,相当于关系型数据库中的 >。
gte:大于等于,相当于关系型数据库中的 >=。
lt:小于,相当于关系型数据库中的 <。
lte:小于等于,相当于关系型数据库中的 <=。

ES之查询结果过滤

{
“query”: {
“match”: {
“username”: “小熊”
}
},
“_source”: [“username”,“packages_name”]
}

ES之查询结果高亮显示

{
	"query": {
		"match": {
			"packages_name":"小熊"
		}
	},
	"highlight":{
		"fields":{
			"username": {}
		}		
	}
}

精确查询于模糊查询

term和match的区别是:

match是经过analyer的,也就是说,文档首先被分析器给处理了。根据不同的分析器,分析的结果也稍显不同,然后再根据分词结果进行匹配。 term则不经过分词,它是直接去倒排索引中查找了精确的值了。

{
	"query": {
		"term": {
			"username": "小"
		}
	}
}

多条件

{
	"query": {
		"terms": {
			"username": ["美","女"]
		}
	},
    "_source": ["username"],
    "from": 0,
    "size": 20
}

#ES的聚合查询avg、max、min、sum

avg

{
	"query": {
		"match": {
			"username": "美女"
		}
	},
    "aggs": {
        "my_avg": {
            "avg": {
                "field" : "comment_count"
            }
        }
    },
    "_source": ["username","comment_count"],
    "from": 0,
    "size": 20
}

max

{
	"query": {
		"match": {
			"username": "美女"
		}
	},
    "aggs": {
        "my_max": {
            "max": {
                "field" : "comment_count"
            }
        }
    },
    "_source": ["username","comment_count"],
    "from": 0,
    "size": 20
}

sum

{
	"query": {
		"match": {
			"username": "美女"
		}
	},
    "aggs": {
        "my_sum": {
            "sum": {
                "field" : "comment_count"
            }
        }
    },
    "_source": ["username","comment_count"],
    "from": 0,
    "size": 20
}

min

{
	"query": {
		"match": {
			"username": "美女"
		}
	},
    "aggs": {
        "my_min": {
            "min": {
                "field" : "comment_count"
            }
        }
    },
    "_source": ["username","comment_count"],
    "from": 0,
    "size": 20
}

https://www.cnblogs.com/xiohao/p/12970224.html