ElasticSearch高级查询


一、子条件查询

定义:特定字段查询所指特定值。

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

评论
评论
  目录