ElasticSearch Query DSL

  1. ES 的 DSL 通常由两种子句组成:
    • 针对特定字段匹配特定值的 Leaf query clauses,例如 match, match_all, term 或者 range 查询
    • 组合了 Leaf query clauses 或其它复合查询的 Compound query clauses (复合查询),例如 bool 或者 dis_max 查询
      上述两种查询在 匹配和过滤(query context or filter context)两种场景中的表现并不一样。
  2. 匹配和过滤(query context or filter context)
    • Query context 除了匹配被检索词,还要计算一个匹配度值。query context 在 query clauses 被赋值给一个 query 参数时生效。
    • Filter context 过滤出符合检索条件的文档,并不计算匹配度。常用的 filter 的结果会被 ES 缓存以提高查询效率。filter context 在 query clauses 被赋值给一个 filter 参数时生效。
curl -X GET "localhost:9200/_search" -H 'Content-Type: application/json' -d'
{
  "query": {  /* query 参数,表明这是 query context */
    "bool": { /* 组合查询 */
      "must": [
        { "match": { "title":   "Search"        }},  /* 构成组合查询的简单查询 */
        { "match": { "content": "Elasticsearch" }}  
      ],
      "filter": [  /* filter 参数,表明这是 filter context */
        { "term":  { "status": "published" }}, 
        { "range": { "publish_date": { "gte": "2015-01-01" }}} 
      ]
    }
  }
}
'
  1. 常见的 Leaf query clauses 查询子句
    • “match_all”:{} 匹配所有文档
    • “match_none”:{} 不匹配任何文档
    • “match”:{“some_filed”:“some text”},match 子句出现在 bool 复合查询下,可以支持 must, must_not,should 等。在 match 查询中,检索词将按照对应字段(“some_field”)的分词方式进行分词后匹配
    • “query_string":{“default_field”: “content”, “query”:“this AND that OR thus”}, 该查询将检索词以 AND 或 OR 运算符进行分割,每部分作为一个检索词进行分词匹配,然后将结果按照 AND 或 OR 的运算进行组合
    • “term”:{“some_field”:“some text”},检索词不会被分词,会查找 “some_field” 字段包含 “some_text” 索引的文档。
    • “terms”:{“some_field”:[“some text 1”, “some text 2”]},检索词之间是或的关系,查找匹配任意检索词的文档
    • “range”:{“some_numeric_field”:{“gte”: 10, “lte”:20}},范围过滤,gte 不小于,gt 严格大于,lte 不大于,lt 严格小于
    • “wildcard”:{“some_field”: “so*te?t”},检索词不分词,通配符匹配,效率比较低
      一般地,查询 text 类型的字段时,应使用 match 类型的查询子句;而 term 查询子句常用来查询 keyword 类型的字段(https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-term-query.html)。
  2. Bool Query
    bool 查询是常见的组合查询,它由一个或多个布尔查询子句组成,布尔查询子句的常见类型有如 must, filter, should 或 must_not 等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值