query語法

1、DSL方式的query語法

查詢經常使用的關鍵字以下:spa

1 query (基於文檔相關性的全文搜索)

term:精確匹配,不會對查詢詞進行分析。下面的示例返回message="loadUserByUsername error"的文檔。code

GET xxx/_search
{
  "query": {
    "term": {
      "message.keyword": {
        "value": "loadUserByUsername error"
      }
    }
  }
}

match:首先會對查詢詞進行分析,而後再匹配。下面的示例返回message中含有"filter" 或者 "error"的全部文檔。blog

GET xxx/_search
{
  "query": {
    "match": {
      "message": "filter error"
    }
  }
}

match_phrase:被查詢詞做爲一個短語,不會將查詢短語拆開。下面的示例返回message="filter error"的文檔。排序

GET xxx/_search
{
  "query": {
    "match_phrase": {
      "message": "filter error"
    }
  }
}

match_phrase_prefix:查詢短語前綴匹配,它與match_phrase的區別在於,它能夠匹配"查詢短語+其它內容"的內容。文檔

GET xxx/_search
{
  "query": {
    "match_phrase_prefix": {
      "message": "loadUser"
    }
  },
  "_source": ["message", "@timestamp"],
  "from": 0
}

 

bool:結合其它真值查詢,一般和must\should\must_not(與或非)一塊兒組合出複雜的查詢。it

must:與的關係,表示必須同時知足must下的全部條件。ast

GET xxx/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "message": "eureka"
          }
        },
        {
          "match": {
            "message": "via"
          }
        }
      ]
    }
  }
}

should:或的關係,表示知足should下的任意一個條件便可。class

GET xxx/_search
{
  "query": {
    "bool": {
      "should": [
        {
          "match": {
            "message": "filter"
          }
        },
        {
          "match": {
            "message": "error"
          }
        }
      ]
    }
  }
}

must_not:非的關係,表示必須同時不知足must_not下的全部條件才行。效率

GET xxx/_search
{
  "query": {
    "bool": {
      "must_not": [
        {
          "match": {
            "message": "filter"
          }
        },
        {
          "match": {
            "message": "error"
          }
        }
      ]
    }
  }
}

2 sort  根據某個字段排序 

GET xxx/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  },
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ]
}

3 _source 

指定查詢結果中展現的字段。  "_source": ["a", "b"]搜索

GET xxx/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  },
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ],
  "_source": ["message", "@timestamp"]
}

4 size 

指定檢索結果輸出的條數,不設定時默認爲10。   "size": 20

GET xxx/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  },
  "_source": ["message", "@timestamp"],
  "size": 20
}

5 from 

以必定的偏移量來檢索咱們的數據,缺省時默認爲0(從檢索的第一條數據開始)。"from": 10

GET xxx/_search
{
  "query": {
    "match": {
      "message": "error"
    }
  },
  "_source": ["message", "@timestamp"],
  "from": 100
}

2、filter過濾

不須要計算相關度分數,搜索效率高。

range:範圍查詢,經過必定範圍的值來過濾文檔。

GET xxx/_search
{
  "query": {
    "bool": {
      "filter": {
        "range": {
          "@timestamp": {
            "gte": "2019-09-11T05:20:36.622Z",
            "lte": "2019-09-11T05:24:36.622Z"
          }
        }
      }
    }
  }
}

exists:匹配那些指定字段中至少包含一個非null值的文檔。 Returns documents that have at least one non-null value in the original field。

GET xxx/_search
{
  "query": {
    "bool": {
      "filter": {
        "exists": {
          "field": "@timestamp"
        }
      }
    }
  }
}
相關文章
相關標籤/搜索