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"]
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章