1,过滤查询
ES查询操作分为2种:查询(query)和 过滤(filter)。
1、Query,默认计算每个返回文档的得分,然后根据得分排序。
2、Filter,只会筛选符合条件的文档,不计算得分,可以缓存文档。
注:单从性能考虑,过滤查询更快。过滤适合在大范围筛选数据,而查询适合精确匹配数据。一般应用时,先使用过滤操作过滤数据,然后使用查询匹配数据。
2,使用语法
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{}
],
“filter”: [
{}
]
}
}
}
注:
在执行 filter 和 query 时,先执行 filter 在执行 query
Elasticsearch 会自动缓存经常使用的过滤器,以加快性能
3,常见过滤类型
• term• terms• range• exists• ids
4,Filter query 案例
4.1,term 过滤查询
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“term”: {
“description”: “真”
}
}
]
}
}
}
4.2,terms 多值过滤查询
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“terms”: {
“age”: [
12,
11,
18,
20
]
}
}
]
}
}
}
4.3,range 范围过滤查询
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“term”: {
“description”: {
“value”: “西”
}
}
}
],
“filter”: [
{
“range”: {
“age”: {
“gte”: 10,
“lte”: 30
}
}
}
]
}
}
}
4.4,exists 存在过滤查询
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“range”: {
“age”: {
“gte”: 10,
“lte”: 18
}
}
}
],
“filter”: [
{
“exists”: {
“field”: “id”
}
}
]
}
}
}
4.5,ids 过滤查询
GET /lanlan/_search
{
“query”: {
“bool”: {
“must”: [
{
“match_all”: {}
}
],
“filter”: [
{
“ids”: {
“values”: [
1,
2,
3,
4,
5,
6
]
}
}
]
}
}
}