DSL之term查询

查询分基于基于单词查询和基于文本查询。

term级别查询

判断字段是否存在(exists)

GET /test-dsl-term-level/_search
{
  "query": {
    "exists": {
      "fields": "name"
    }
  }
}

id查询(ids)

GET /test-dsl-term-level/_search
{
  "query": {
    "ids": {
      "values": [3, 1]
    }
  }
}

前缀查询(prefix)

通过前缀查找某个字段

GET /test-dsl-term-level/_search
{
  "query": {
    "prefix": {
      "name": {
        "value": "Jan"
      }
    }
  }
}

分词匹配(term)

GET /test-dsl-term-level/_search
{
  "query": {
    "term": {
      "programming_languages": "php"
    }
  }
}

多个分词匹配(terms)

按照单个分词term匹配,它们是or的关系

GET /test-dsl-term-level/_search
{
  "query": {
    "terms": {
      "programming_languages": ["php","c++"]
    }
  }
}

按某个数字字段分词匹配(term_set)

设计这种方式查询的初衷是用文档中的数字字段动态匹配查询满足term的个数

GET /test-dsl-term-level/_search
{
  "query": {
    "terms_set": {
      "programming_languages": {
        "terms": [ "java", "php" ],
        "minimum_should_match_field": "required_matches"
      }
    }
  }
}

上面的查询只有都包含"java", "php"的才会返回

通配符(wildcard)

GET /test-dsl-term-level/_search
{
  "query": {
    "wildcard": {
      "name": {
        "value": "D*ai",
        "boost": 1.0,
        "rewrite": "constant_score"
      }
    }
  }
}

范围(range)

常常被用在数字或者日期范围的查询

GET /test-dsl-term-level/_search
{
  "query": {
    "range": {
      "required_matches": {
        "gte": 3,
        "lte": 4
      }
    }
  }
}

正则(regexp)

通过正则表达式查询

GET /test-dsl-term-level/_search
{
  "query": {
    "regexp": {
      "name": {
        "value": "Ja.*",
        "case_insensitive": true
      }
    }
  }
}

模糊匹配(fuzzy)

GET /test-dsl-term-level/_search
{
  "query": {
    "fuzzy": {
      "remarks": {
        "value": "hell"
      }
    }
  }
}

参考

https://pdai.tech/md/db/nosql-es/elasticsearch-x-dsl-term.html