ES Term Query

ES Term Query

ES 查询使用Query DSL定义查询条件,基本查询结构如下:

{

       “query” :

              {

                     “Term 查询” | 文本查询| 符合查询: {}

              }

       “关联查询”:query object;

}

如果是关联查询,则在关联查询下内嵌普通查询结构

Query 和 Filter

       Query 表示文档和Query 条件的匹配分数,在_score 元数据中记录匹配值

      Filter 元素表示过滤,结果只有是或者否。Filter的表现形式为filter或must_not参数

GET /_search

{

  "query": {

    "bool": {

      "must": [

        { "match": { "title":   "Search"        }},

        { "match": { "content": "Elasticsearch" }}

      ],

      "filter": [

        { "term":  { "status": "published" }},

        { "range": { "publish_date": { "gte": "2015-01-01" }}}

      ]

    }

  }

}

Term-level 查询(精确查询)

       针对结构化数据的精确查询。和全文查询的区别是 terms 查询不进行文本分析,而是精确匹配查询术语。

Exists Query

文档域是否存在,以下情况域不存在:

  1. 域为null或[]
  2. 域的配置index:false
  3. 域值的长度超过了mapping中ignore_above的设定值
  4. 域值格式错误, 并且mapping中设置了ignore_malformed

GET /_search

{

  "query": {

    "bool": {

      "must_not": {

        "exists": {

          "field": "user.id"

        }

      }

    }

  }

}

Fuzzy Query 相似查询(非通配符模糊查询)

相似查询,包括某个字符不同, 缺失或多出一个字符,两个字符位置颠倒。

GET /_search

{

  "query": {

    "fuzzy": {

      "user.id": {

        "value": "ki"

      }

    }

  }

}

IDS

多个ID查询

GET /_search

{

  "query": {

    "ids" : {

      "values" : ["1", "4", "100"]

    }

  }

}

Prfix

返回域值包含指定前缀。

GET /_search

{

  "query": {

    "prefix": {

      "user.id": {

        "value": "ki"

      }

    }

  }

}

Range Query

范围查找

GET /_search

{

  "query": {

    "range": {

      "timestamp": {

        "gte": "now-1d/d",

        "lt": "now/d"

      }

    }

  }

}

GET /_search

{

  "query": {

    "range": {

      "timestamp": {

        "time_zone": "+01:00",       

        "gte": "2020-01-01T00:00:00",

        "lte": "now"                 

      }

    }

  }

}

Regexp

正则匹配

GET /_search

{

  "query": {

    "regexp": {

      "user.id": {

        "value": "k.*y",

        "flags": "ALL",

        "case_insensitive": true,

        "max_determinized_states": 10000,

        "rewrite": "constant_score"

      }

    }

  }

}

Term query

精确匹配域值,可以和文本搜索match对比理解。

GET my-index-000001/_search?pretty

{

  "query": {

    "term": {

      "full_text": "Quick Brown Foxes!"

    }

  }

}

Terms Query

域值匹配其中的多个给定值中的一个或多个。

GET /_search

{

  "query": {

    "terms": {

      "user.id": [ "kimchy", "elkbee" ],

      "boost": 1.0

    }

  }

}

GET my-index-000001/_search?pretty

{

  "query": {

    "terms": {

        "color" : {

            "index" : "my-index-000001",

            "id" : "2",

            "path" : "color"

        }

    }

  }

}

Terms set query

类似于terms查询, 指定匹配的数量。

PUT /job-candidates/_doc/1?refresh

{

  "name": "Jane Smith",

  "programming_languages": [ "c++", "java" ],

  "required_matches": 2

}

PUT /job-candidates/_doc/2?refresh

{

  "name": "Jason Response",

  "programming_languages": [ "java", "php" ],

  "required_matches": 2

}

GET /job-candidates/_search

{

  "query": {

    "terms_set": {

      "programming_languages": {

        "terms": [ "c++", "java", "php" ],

        "minimum_should_match_field": "required_matches"

      }

    }

  }

}

Wildcard query(通配符查询)

GET /_search

{

  "query": {

    "wildcard": {

      "user.id": {

        "value": "ki*y",

        "boost": 1.0,

        "rewrite": "constant_score"

      }

    }

  }

}

Rewrite:ES用户影响如何执行fuzzy,prefix,query_string, regexp,wildcard等Apache Lucene无法支持的查询如何实际执行。推荐constant_score, constant_score_boolean, 或 top_terms_boost_N。

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/query-dsl-multi-term-rewrite.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值