1. 程式人生 > >【ES】學習3-請求體查詢

【ES】學習3-請求體查詢

ext 組合 https 傳遞 guide should 學習 text class

1.空查詢

GET /index_2014*/type1,type2/_search
{}
GET /_search
{
  "from": 30,
  "size": 10
}

2.查詢表達式

DSL只需將查詢語句傳遞給 query 參數

GET /_search
{
    "query": YOUR_QUERY_HERE
}

查詢全部 match_all 跟空查詢等價

GET /_search
{
    "query": {
        "match_all": {}
    }
}

針對某個字段,結構

{
    QUERY_NAME: {
        FIELD_NAME: {
            ARGUMENT: VALUE,
            ARGUMENT: VALUE,...
        }
    }
}
GET /_search
{
    "query": {
        "match": {
            "tweet": "elasticsearch"
        }
    }
}

3.查詢與過濾

查詢:一個評分的匹配,計算相似度

過濾:一個不評分的匹配,只有是或否。過濾的性能更好。

4.重要字段

match_all:匹配所有

{ "match_all": {}}

match:全文匹配或精確匹配

{ "match": { "tweet": "About Search" }}
{ "match": { "age":    26           }}
{ 
"match": { "date": "2014-09-01" }} { "match": { "public": true }} { "match": { "tag": "full_text" }}

multi_match:在多個字段上執行相同的match查詢

{
    "multi_match": {
        "query":    "full text search",
        "fields":   [ "title", "body" ]
    }
}

range:找出那些落在指定區間內的數字或者時間

{
    "range": {
        
"age": { "gte": 20, "lt": 30 } } }

term:用於精確值 匹配,這些精確值可能是數字、時間、布爾或者那些not_analyzed 的字符串

{ "term": { "age":    26           }}
{ "term": { "date":   "2014-09-01" }}
{ "term": { "public": true         }}
{ "term": { "tag":    "full_text"  }}

terms:和 term 查詢一樣,但它允許你指定多值進行匹配。如果這個字段包含了指定值中的任何一個值,那麽這個文檔滿足條件

{ "terms": { "tag": [ "search", "full_text", "nosql" ] }}

exists:查找指定字段中有值的文檔

{
    "exists":   {
        "field":    "title"
    }
}

missing:查找指定字段中無值的文檔

5.組合多查詢

bool:將多查詢組合在一起。它支持參數:

  must:文檔 必須 匹配這些條件才能被包含進來。

  must_not:文檔 必須不 匹配這些條件才能被包含進來。

  should:如果滿足這些語句中的任意語句,將增加 _score ,否則,無任何影響。它們主要用於修正每個文檔的相關性得分。

  filter:必須 匹配,但它以不評分、過濾模式來進行。這些語句對評分沒有貢獻,只是根據過濾標準來排除或包含文檔。

{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "range": { "date": { "gte": "2014-01-01" }} 
        }
    }
}
{
    "bool": {
        "must":     { "match": { "title": "how to make millions" }},
        "must_not": { "match": { "tag":   "spam" }},
        "should": [
            { "match": { "tag": "starred" }}
        ],
        "filter": {
          "bool": { 
              "must": [
                  { "range": { "date": { "gte": "2014-01-01" }}},
                  { "range": { "price": { "lte": 29.99 }}}
              ],
              "must_not": [
                  { "term": { "category": "ebooks" }}
              ]
          }
        }
    }
}

constant_score查詢:

它將一個不變的常量評分應用於所有匹配的文檔。它被經常用於你只需要執行一個 filter 而沒有其它查詢(例如,評分查詢)的情況下。可以使用它來取代只有 filter 語句的 bool 查詢。

{
    "constant_score":   {
        "filter": {
            "term": { "category": "ebooks" } 
        }
    }
}

6. 驗證查詢

_validate, explain:判斷查詢是否合法以及原因。

GET /gb/tweet/_validate/query?explain 
{
   "query": {
      "tweet" : {
         "match" : "really powerful"
      }
   }
}

【ES】學習3-請求體查詢