ElasticSearch入门3: 高级查询

Posted 刘晓明

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ElasticSearch入门3: 高级查询相关的知识,希望对你有一定的参考价值。

 

 

 

单字段 模糊匹配查询与精准查询
postman请求

POST     127.0.0.1:9200/book/_search

请求json:

{
   "query":{
           "match":{
               "name":"晓明9"
           }
   }
}

注:match 模糊查询的标识 :查询内容自动拆分成分词来查询
  若match 改为 match_phrase :精准查询 具体可以查看 http://www.cnblogs.com/liuxiaoming123/p/8119217.html
   响应结果: { "took": 51, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 4, "max_score": 0.5753642, "hits": [ { "_index": "book", "_type": "novel", "_id": "1", "_score": 0.5753642, "_source": { "name": "晓明1", "country": "china1", "age": 26, "date": "1992-08-08" } }, { "_index": "book", "_type": "novel", "_id": "5", "_score": 0.28363907, "_source": { "name": "晓明", "country": "china", "age": 26, "date": "1992-08-08" } }, { "_index": "book", "_type": "novel", "_id": "8", "_score": 0.28363907, "_source": { "name": "晓明", "country": "china", "age": 26, "date": "1992-08-08" } }, { "_index": "book", "_type": "novel", "_id": "9", "_score": 0.23911436, "_source": { "name": "晓明9", "country": "china9", "age": 26, "date": "1992-08-08" } } ] } }

 


多字段 模糊匹配查询与精准查询
postman请求URL:

POST  127.0.0.1:9200/book/_search

请求json字符串:

{
   "query":{
           "multi_match":{
               "query":"晓明china",
               "fields":["name","country"]
           }
   }
}

注:multi_match为指定多字段匹配

响应结果:

{
    "took": 42,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 4,
        "max_score": 0.5753642,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "1",
                "_score": 0.5753642,
                "_source": {
                    "name": "晓明1",
                    "country": "china1",
                    "age": 26,
                    "date": "1992-08-08"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "5",
                "_score": 0.47000363,
                "_source": {
                    "name": "晓明",
                    "country": "china",
                    "age": 26,
                    "date": "1992-08-08"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "8",
                "_score": 0.47000363,
                "_source": {
                    "name": "晓明",
                    "country": "china",
                    "age": 26,
                    "date": "1992-08-08"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "9",
                "_score": 0.23911436,
                "_source": {
                    "name": "晓明9",
                    "country": "china9",
                    "age": 26,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

 

语法查询 
未指定字段:
postman请求:

POST 127.0.0.1:9200/book/_search

请求json字符串:

{
   "query":{
           "query_string":{
               "query":"(ElasticSearch AND 入门) OR SpringBoot"
           }
   }
}

返回结果:

{
    "took": 21,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2.634553,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "9",
                "_score": 2.634553,
                "_source": {
                    "name": "ElasticSearch 入门",
                    "country": "china9",
                    "age": 26,
                    "date": "1992-08-08"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "1",
                "_score": 0.2876821,
                "_source": {
                    "name": "SpringBoot",
                    "country": "china1",
                    "age": 26,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

 

 语法查询
 指定字段:

 

postman请求:

POST 127.0.0.1:9200/book/_search

请求json字符串:

{
   "query":{
           "query_string":{
               "query":"SpringBoot OR 中国",
               "fields":["name","country"]
           }
   }
}

响应结果:

{
    "took": 11,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0.8630463,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "1",
                "_score": 0.8630463,
                "_source": {
                    "name": "SpringBoot",
                    "country": "中国",
                    "age": 26,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

 

 

 

 

 (结构化数据的查询)

指定字段查询:(term)

postman请求:

POST   127.0.0.1:9200/book/_search

请求json字符串:

{
    "query" : 
        {
            "term" : {"name" : "springboot"}
        }
}

响应结果:

{
    "took": 4,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0.2876821,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "1",
                "_score": 0.2876821,
                "_source": {
                    "name": "SpringBoot",
                    "country": "中国",
                    "age": 26,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

注:若查询英文时 应全字母小写 精确查询

  若查询中文时 应按单个字来查询

 

 

 

 

范围查询:

注:json请求字符串中部分字段的含义

  range:范围关键字

  gte 大于等于

  lte  小于等于

  gt 大于

  lt 小于

  now 当前时间

postman请求:

127.0.0.1:9200/book/_search

请求json字符串:

{
    "query" : 
        {
            "range" : {
                "date" : {
                        "gte":"2017-01-01",
                        "lte":"now"
                         }
                    }
        }
}

响应结果:

{
    "took": 7,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "9",
                "_score": 1,
                "_source": {
                    "name": "ElasticSearch 入门",
                    "country": "china9",
                    "age": 28,
                    "date": "2017-08-08"
                }
            }
        ]
    }
}

 

 

Filter Context(对数据进行过滤)

postman请求:

POST  127.0.0.1:9200/book/_search

请求json字符串:

{
    "query" : {
            "bool" : {
                "filter" : {
                        "term":{
                        "age":20
                                }
                            }
                        }
              }
}

响应结果:

{
    "took": 24,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 0,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "1",
                "_score": 0,
                "_source": {
                    "name": "SpringBoot",
                    "country": "中国",
                    "age": 20,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

 

 

注: boost 固定响应结果分数的值

postman请求:

POST 127.0.0.1:9200/_search

请求json字符串:

{
    "query" : {
            "constant_score" : {
                "filter" : {
                            "match":{
                                        "name":"晓明"
                                    }
                            },
                            "boost":2
                        }
              }
}

响应结果:

{
    "took": 11,
    "timed_out": false,
    "_shards": {
        "total": 8,
        "successful": 8,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 2,
        "hits": [
            {
                "_index": "book",
                "_type": "novel",
                "_id": "5",
                "_score": 2,
                "_source": {
                    "name": "晓明",
                    "country": "china",
                    "age": 26,
                    "date": "1992-08-08"
                }
            },
            {
                "_index": "book",
                "_type": "novel",
                "_id": "8",
                "_score": 2,
                "_source": {
                    "name": "晓明8",
                    "country": "china",
                    "age": 26,
                    "date": "1992-08-08"
                }
            }
        ]
    }
}

 

should关键词:或的关系  

若should改为must 关键词则表示 和的关系

postman请求:

POST 127.0.0.1:9200/_search

请求json字符串:
    1.shuld:
{
    "query" : {
            "bool" : {
                "should" : [
                            {
                                "match":{"name":"springboot"}
                            },
                            {
                                "match":{"country":"中国"}
                            }
                            ]
                        }
              }
}

 2.must:
{
    "query" : {
            "bool" : {
                "must" : [
                            {
                                "match":{"name":"springboot"}
                            },
                            {
                                "match":{"country":"中国"}
                            }
                            ]
                        }
              }
}

3.must filter:
{
    "query" : {
            "bool" : {
                "must" : [
                            {
                                "match":{"name":"springboot"}
                            },
                            {
                                "match":{"country":"中国"}
                            }
                            ],
                   "filter":[
                            {
                                "term":{
                                    "age":20
                                }
                            }    
                            ]
                        }
              }
}

4.must_not:
{
    "query" : {
            "bool" : {
                "must_not" : {
                                "term":{"age":20}
                             }
                      }
               }
}

以上是关于ElasticSearch入门3: 高级查询的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch全文检索技术 一篇文章即可从入门到精通(Elasticsearch安装,安装kibana,安装ik分词器,数据的增删改查,全文检索查询,聚合aggregations)(代码片

ElasticSearch在JavaAPI中的操作(入门)

Elasticsearch7.8.0版本入门——桶聚合查询文档(高级查询)

[学习ES系列]-4.ElasticSearch基础交互-基础查询与高级查询

ElasticSearch分布式

ElasticSearch-7.10版本最新万字长文教程距离搞懂ELK核心你只差这一片文章