Kibana+ElasticSearch实现索引数据的几种查询方式

1.match_all搜索,直接返回所有文档

GET /school/_search
{
    "query": {
        "match_all": {}
    }
}

 返回结果大致如下:

{
    "took": 13,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 23,
        "max_score": 1,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "b3ffcWIB-npqvsX5SmVm",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "group_by_word_count": {
                            "terms": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "c3fjcWIB-npqvsX5G2Wh",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "grades_word_count": {
                            "stats": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dHfjcWIB-npqvsX5uWWr",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "grades_word_count": {
                            "min": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dXfkcWIB-npqvsX5hmWx",
                "_score": 1,
                "_source": {
                    "query": {
                        "match": {
                            "name": "海哥"
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dnflcWIB-npqvsX5S2V0",
                "_score": 1,
                "_source": {
                    "query": {
                        "multi_match": {
                            "query": "海哥",
                            "fields": [
                                "name",
                                "address"
                            ]
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fXfqcWIB-npqvsX5yGXf",
                "_score": 1,
                "_source": {
                    "query": {
                        "bool": {
                            "filter": {
                                "term": {
                                    "word_count": 2000
                                }
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fnfrcWIB-npqvsX5mGXq",
                "_score": 1,
                "_source": {
                    "query": {
                        "constant_score": {
                            "filter": {
                                "match": {
                                    "title": "ElasticSearch"
                                }
                            },
                            "boost": 2
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "gHfucWIB-npqvsX5HWUB",
                "_score": 1,
                "_source": {
                    "query": {
                        "bool": {
                            "must_not": [
                                {
                                    "term": {
                                        "word_count": "2000"
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 1,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "cHffcWIB-npqvsX59mXN",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "group_by_word_count": {
                            "terms": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            }
        ]
    }
}

 参数大致解释:
took: 执行搜索耗时,毫秒为单位
time_out: 搜索是否超时
_shards: 多少分片被搜索,成功多少,失败多少
hits: 搜索结果展示
hits.total: 匹配条件的文档总数
hits.hits: 返回结果展示,默认返回十个
hits.max_score:最大匹配得分
hits._score: 返回文档的匹配得分(得分越高,匹配程度越高,越靠前)
_index _type _id 作为剥层定位到特定的文档
_source 文档源

 2.执行查询
   2.1 只显示name和address

POST /school/_search
{
    "query": {
        "match_all": {}
    },
    "_source": [
        "name",
        "address"
    ]
}

  查询结果:

{
    "took": 313,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 23,
        "max_score": 1,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "b3ffcWIB-npqvsX5SmVm",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "c3fjcWIB-npqvsX5G2Wh",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dHfjcWIB-npqvsX5uWWr",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dXfkcWIB-npqvsX5hmWx",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dnflcWIB-npqvsX5S2V0",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fXfqcWIB-npqvsX5yGXf",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fnfrcWIB-npqvsX5mGXq",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "gHfucWIB-npqvsX5HWUB",
                "_score": 1,
                "_source": {}
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 1,
                "_source": {
                    "address": "山东烟台",
                    "name": "张小花"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "cHffcWIB-npqvsX59mXN",
                "_score": 1,
                "_source": {}
            }
        ]
    }
}

 2.2 返回name为haige的document

POST /school/_search
{
    "query": {
        "match": {
            "name": "张小花"
        }
    }
}

  查询结果:

{
    "took": 439,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2.634553,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "bXfXcWIB-npqvsX5w2Vc",
                "_score": 2.634553,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 0.8630463,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            }
        ]
    }
}

 2.3 返回name包含"海"的所有document

POST /school/_search
{
    "query": {
        "match": {
            "name": "海"
        }
    }
}

  查询结果:

{
    "took": 68,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1.0417081,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "3",
                "_score": 1.0417081,
                "_source": {
                    "name": "海哥",
                    "address": "山东济宁",
                    "age": 27,
                    "date": "1998-03-16"
                }
            }
        ]
    }
}

 2.4 返回name中包含term "海" 或 "花" 的所有document

POST /school/_search
{
    "query": {
        "match": {
            "name": "海 花"
        }
    }
}

  查询结果:

{
    "took": 26,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 1.0417081,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "3",
                "_score": 1.0417081,
                "_source": {
                    "name": "海哥",
                    "address": "山东济宁",
                    "age": 27,
                    "date": "1998-03-16"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "bXfXcWIB-npqvsX5w2Vc",
                "_score": 0.8781843,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 0.2876821,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            }
        ]
    }
}

 2.5 匹配phrase "海 花"

POST /school/_search
{
    "query": {
        "match_phrase": {
            "name": "海 花"
        }
    }
}

  查询结果:

{
    "took": 5,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

 2.6 返回name中包含"海"和"哥"的所有账户(AND)

POST /school/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "海"
                    }
                },
                {
                    "match": {
                        "name": "哥"
                    }
                }
            ]
        }
    }
}

  查询结果:

{
    "took": 208,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 2.0834162,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "3",
                "_score": 2.0834162,
                "_source": {
                    "name": "海哥",
                    "address": "山东济宁",
                    "age": 27,
                    "date": "1998-03-16"
                }
            }
        ]
    }
}

 2.7 返回name中包含"海"或"花"的所有document

POST /school/_search
{
    "query": {
        "bool": {
            "should": [
                {
                    "match": {
                        "name": "海"
                    }
                },
                {
                    "match": {
                        "name": "花"
                    }
                }
            ]
        }
    }
}

 查询结果:

{
    "took": 19,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 3,
        "max_score": 1.0417081,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "3",
                "_score": 1.0417081,
                "_source": {
                    "name": "海哥",
                    "address": "山东济宁",
                    "age": 27,
                    "date": "1998-03-16"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "bXfXcWIB-npqvsX5w2Vc",
                "_score": 0.8781843,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 0.2876821,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            }
        ]
    }
}

  2.8 查询name中既不包含"海",也不包含"哥"的所有document

POST /school/_search
{
    "query": {
        "bool": {
            "must_not": [
                {
                    "match": {
                        "name": "海"
                    }
                },
                {
                    "match": {
                        "name": "哥"
                    }
                }
            ]
        }
    }
}

 查询结果:

{
    "took": 264,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 22,
        "max_score": 1,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "b3ffcWIB-npqvsX5SmVm",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "group_by_word_count": {
                            "terms": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "c3fjcWIB-npqvsX5G2Wh",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "grades_word_count": {
                            "stats": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dHfjcWIB-npqvsX5uWWr",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "grades_word_count": {
                            "min": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dXfkcWIB-npqvsX5hmWx",
                "_score": 1,
                "_source": {
                    "query": {
                        "match": {
                            "name": "海哥"
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "dnflcWIB-npqvsX5S2V0",
                "_score": 1,
                "_source": {
                    "query": {
                        "multi_match": {
                            "query": "海哥",
                            "fields": [
                                "name",
                                "address"
                            ]
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fXfqcWIB-npqvsX5yGXf",
                "_score": 1,
                "_source": {
                    "query": {
                        "bool": {
                            "filter": {
                                "term": {
                                    "word_count": 2000
                                }
                            }
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "fnfrcWIB-npqvsX5mGXq",
                "_score": 1,
                "_source": {
                    "query": {
                        "constant_score": {
                            "filter": {
                                "match": {
                                    "title": "ElasticSearch"
                                }
                            },
                            "boost": 2
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "gHfucWIB-npqvsX5HWUB",
                "_score": 1,
                "_source": {
                    "query": {
                        "bool": {
                            "must_not": [
                                {
                                    "term": {
                                        "word_count": "2000"
                                    }
                                }
                            ]
                        }
                    }
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "HYVJOGIBUtf8tEPshwDC",
                "_score": 1,
                "_source": {
                    "name": "张小花",
                    "address": "山东烟台",
                    "age": 24,
                    "date": "1996-07-24"
                }
            },
            {
                "_index": "school",
                "_type": "student",
                "_id": "cHffcWIB-npqvsX59mXN",
                "_score": 1,
                "_source": {
                    "aggs": {
                        "group_by_word_count": {
                            "terms": {
                                "field": "word_count"
                            }
                        }
                    }
                }
            }
        ]
    }
}

 2.9 返回name中包含"海",且地址不是"山东烟台"的所有document

POST /school/_search
{
    "query": {
        "bool": {
            "must": [
                {
                    "match": {
                        "name": "海"
                    }
                }
            ],
            "must_not": [
                {
                    "match": {
                        "address": "山东烟台"
                    }
                }
            ]
        }
    }
}

 查询结果:

{
    "took": 73,
    "timed_out": false,
    "_shards": {
        "total": 3,
        "successful": 3,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1.0417081,
        "hits": [
            {
                "_index": "school",
                "_type": "student",
                "_id": "3",
                "_score": 1.0417081,
                "_source": {
                    "name": "海哥",
                    "address": "山东济宁",
                    "age": 27,
                    "date": "1998-03-16"
                }
            }
        ]
    }
}

 3. 过滤查询
     3.1 在所有document中寻找age在0-25岁之间(闭区间)的学生

POST /school/_search
{
    "query": {
        "filtered": {
            "query": {
                "match_all": {}
            },
            "filter": {
                "range": {
                    "age": {
                        "gte": 0,
                        "lte": 25
                    }
                }
            }
        }
    }
}

4.谈论query和filter的效率
   一般认为filter的速度快于query的速度 
   - filter不会计算相关度得分,效率高 
   - filter的结果可以缓存到内存中,方便再用

原文链接:https://blog.csdn.net/linhaiyun_ytdx/article/details/79762926

posted @ 2020-03-04 15:18  MR__Wang  阅读(7560)  评论(0编辑  收藏  举报