ElasticSearch 进阶 (高级查询)

需要了解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
                    }
               }
            }  
        }
    }

上一篇:Scala中的模式匹配


下一篇:【ElasticSearch】精确匹配text字段 用match加.keyword 或 term