欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ElasticSearch 进阶 (高级查询)

程序员文章站 2022-07-05 14:49:09
...

需要了解elasticSearch基础入门可以查看https://blog.csdn.net/u014232211/article/details/120026239

下面的例子基于这份数据来查询

ElasticSearch 进阶 (高级查询)

 

高级查询

a.子条件查询 特定字段查询所指特定值

  • Query Contexy:
    • 概念: 在查询过程中,除了判断文档是否满足查询条件外,ES还会计算一个_score来表示匹配程度,旨在判断目标文档和查询条件匹配的有多好/多么吻合。
    • 全文本查询: 针对文本类型数据
      • 模糊匹配(查询author的数据是problem1的蔬果)
        {
            "query":{
                "match":{
                    "author": "problem1"
                }
            }
        }
      • 其余匹配(整个字段匹配,不拆分单词去匹配)
        {
            "query":{
                "match_phrase":{
                    "title": "NBA333"
                }
            }
        }
      • 多个字段匹配 (author和titile中包含NBA333的字段)
        {
            "query":{
                "multi_match":{
                    "query": "NBA333",
                    "fields": ["author","title"]
                }
            }
        }
      •  字符串查询
        {
            "query":{
                "query_string":{
                    "query": "problem1 AND problem2",
                    "fields": ["author"]
                }
            }
        }
    • 字段级别查询: 针对结构化数据,如数字、日期等

      •   字段查询
        {
            "query":{
                "term":{
                    "word_count": "2000"
                }
            }
        }
      • 范围查询
        {
            "query":{
                "range":{
                    "word_count": {
                        "gte": 1000,
                        "lte": 2000000
                    }
                }
            }
        }

        (日期类型)

        {
            "query":{
                "range":{
                    "publish_date": {
                        "gte": "2021-01-01",
                        "lte": "2021-02-02"
                    }
                }
            }
        }
  • Filter Context
    • 概念:在查询过程中,只判断文档是否满足条件,只有Yes或者No
    • filter要配合bool一起使用,filter结果es会缓存,查询比文本块
    • eg:
      {
          "query":{
              "bool":{
                  "filter":{
                      "term":{
                          "word_count": 2000
                      }
                  }
              }
          }
      }

b.复合条件查询 以一定的逻辑组合子条件查询

  • 固定分数查询:
    {
        "query":{
            "constant_score":{
                "filter":{
                    "match":{
                        "author":"problem1"
                    }
                },
                "boost":10
            }
            
        }
    }
  • 布尔查询:
    {
        "query":{
            "bool":{
               "should":[
                   {
                       "match":{
                            "author": "problem1"
                       }
                   },
                   {
                       "match":{
                            "title": "男孩"
                       }
                   }
               ]
            }  
        }
    }
    {
        "query":{
            "bool":{
               "must_not":[
                   {
                       "match":{
                            "author": "problem1"
                       }
                   },
                   {
                       "match":{
                            "title": "男孩"
                       }
                   }
               ],
               "filter":{
                   "term":{
                        "word_count": 5000
                    }
               }
            }  
        }
    }