elasticsearch Query DSL(二)

本文参考官方提供api提炼出来的

https://www.elastic.co/guide/en/elasticsearch/reference/current/search.html

Term Level Queries

Term Query

term query查找包含倒排索引中指定的确切term的文档。

GET _search
{
  "query": {
    "bool": {
      "should": [
        {
          "term": {
            "status": {
              "value": "urgent",
              "boost": 2.0
            }
          }
        },
        {
          "term": {
            "status": "normal"
          }
        }
      ]
    }
  }
}

为什么term查询不符合我的文档?

字符串字段可以是类型text(视为全文,如电子邮件正文),或keyword(视为确切的值,如电子邮件地址或邮政编码)。确切的值(如数字,日期和关键字)具有在添加到倒排索引的字段中指定的确切值,以便使它们可搜索。

term查询查找的确切领域的倒排索引项-它不知道该字段的分析什么。这使得在关键字字段或数字或日期字段中查找值非常有用。查询全文字段时,请改用 match查询,该查询了解字段的分析方式。

Terms Query

筛选包含与任何提供的terms (not analyzed)匹配的字段的文档

GET /_search
{
    "query": {
        "terms" : { "user" : ["kimchy", "elasticsearch"]}
    }
}

terms 查找机制支持以下选项:

index

从中获取term值的索引。

type

从中获取term值的类型。

id

要从中获term语值的文档的ID。

path

该字段指定为获取terms过滤器实际值的路径 。

routing

检索外部terms doc时要使用的自定义路由值。

Terms Set Query 

返回与至少一个或多个提供的terms匹配的任何文档。这些terms未经过分析,因此必须完全匹配。必须匹配的terms数量因文档而异,并且由最小匹配字段控制或每个文档计算至少应匹配脚本。

GET /my-index/_search
{
    "query": {
        "terms_set": {
            "codes" : {
                "terms" : ["abc", "def", "ghi"],
                "minimum_should_match_field": "required_matches"
            }
        }
    }
}

Range Query

匹配具有特定范围内的字段的字段的文档。Lucene查询的类型取决于字段类型,对于string 字段TermRangeQuery,而对于数字/日期字段,查询是一个NumericRangeQuery

GET _search
{
    "query": {
        "range" : {
            "age" : {
                "gte" : 10,
                "lte" : 20,
                "boost" : 2.0
            }
        }
    }
}

rangequery接受以下参数:

gte

大于或等于

gt

比...更棒

lte

小于或等于

lt

少于

boost

设置查询的提升值,默认为 1.0

Date Range Query

GET _search
{
    "query": {
        "range" : {
            "date" : {
                "gte" : "now-1d/d",
                "lt" :  "now/d"
            }
        }
    }
}

使用日期数学将日期舍入到最近的日,月,小时等时,舍入日期取决于范围的结尾是包含还是排除。

向上舍入移动到舍入范围的最后一毫秒,并向下舍入到舍入范围的第一毫秒。例如:

gt

大于日期舍入:2014-11-18||/M变为 2014-11-30T23:59:59.999,即不包括整个月。

gte

大于或等于向下舍入的日期:2014-11-18||/M变为 2014-11-01,即包括整个月。

lt

小于向下舍入的日期:2014-11-18||/M变为2014-11-01,即排除整个月份。

lte

小于或等于向上舍入的日期:2014-11-18||/M变为 2014-11-30T23:59:59.999,即包括整个月。

范围查询中的时区

通过在日期值本身中指定时区(如果format 接受它),可以将日期从另一个时区转换为UTC ,或者可以将其指定为time_zone参数:

GET _search
{
    "query": {
        "range" : {
            "timestamp" : {
                "gte": "2015-01-01 00:00:00",
                "lte": "now",
                "time_zone": "+01:00"
            }
        }
    }
}

查询范围字段

range查询可以在类型的字段上使用range,允许将查询中指定的范围与文档中的范围字段值进行匹配。该relation参数控制这两个范围的匹配方式:

WITHIN

匹配范围字段完全在查询范围内的文档。

CONTAINS

匹配范围字段完全包含查询范围的文档。

INTERSECTS

匹配范围字段与查询范围相交的文档。这是查询范围字段时的默认值。

Exists Query

返回在原始字段中至少有一个非空值的documents。

GET /_search
{
    "query": {
        "exists" : { "field" : "user" }
    }
}

没有missing查询。而是existsmust_not子句中使用查询 ,如下所示:

GET /_search
{
    "query": {
        "bool": {
            "must_not": {
                "exists": {
                    "field": "user"
                }
            }
        }
    }
}

Prefix Query

匹配包含具有指定前缀(not analyzed)的术语的字段的文档。

GET /_search
{ "query": {
    "prefix" : { "user" :  { "value" : "ki", "boost" : 2.0 } }
  }
}

Wildcard Query

查找指定字段包含与指定模式匹配的术语的文档,其中模式支持单字符通配符(?)和多字符通配符(*

GET /_search
{
    "query": {
        "wildcard" : { "user" : { "wildcard" : "ki*y", "boost" : 2.0 } }
    }
}

Regexp Query

查找指定字段包含与指定的正则表达式匹配的术语的文档 。

GET /_search
{
    "query": {
        "regexp":{
            "name.first":{
                "value":"s.*y",
                "boost":1.2
            }
        }
    }
}

Fuzzy Query

查找指定字段包含与指定术语模糊相似的术语的文档。

GET /_search
{
    "query": {
        "fuzzy" : {
            "user" : {
                "value": "ki",
                "boost": 1.0,
                "fuzziness": 2,
                "prefix_length": 0,
                "max_expansions": 100
            }
        }
    }
}

参数

fuzziness

最大编辑距离。默认为AUTO。请参见模糊编辑

prefix_length

不会“模糊化”的初始字符数。这有助于减少必须检查的术语数量。默认为0

max_expansions

fuzzy查询将扩展到 的最大术语数。默认为50

transpositions

是否支持模糊转置(ab→ ba)。默认是false

如果prefix_length设置为0,则此查询可能非常重,如果 max_expansions设置为高数字。这可能导致索引中的每个术语都被检查!

Type Query

查找指定类型的文档。

GET /_search/_search
{{
    "query": {"query": {
        "type" : {"type" : {
            "value" : "_doc""value" : "_doc"
        }}
    }}
}}

Ids Query

查找具有指定类型和ID的文档。

GET /_search
{
    "query": {
        "ids" : {
            "type" : "_doc",
            "values" : ["1", "4", "100"]
        }
    }
}

猜你喜欢

转载自my.oschina.net/u/4008390/blog/2874656