1. 程式人生 > >[Elasticsearch]查詢語法速查

[Elasticsearch]查詢語法速查

0x00 SQL 轉 Query-DSL 外掛,還用毛學DSL

0x01 基本語法

注意,隨著ES版本變化,搜尋語法也有小調整。本文以1.7為準。

  • 全基於rest式http呼叫。 其中GET方法支援在body傳引數。
  • _search 是關鍵字,以此結束表示搜尋行為,可以同時搜尋多個index與type。
  • body部分必需是json;同時支援 URL 中使用query_string傳參;
  • 搜尋請求會以query_string引數優先,且在 URL 中的引數有可能使用簡寫,如q==query。
  • 可以同時索引多個index或type,逗號隔開,或直接使用萬用字元

0x02 例子:Group By
– 單條件

curl -XPOST 'http://localhost:9200/index-x/type-x/_search?search_type=count' -d'{
    "aggs": {
        "group_by_xxoo": { 
            "terms": {
                "field": "stype"
            }
        }
    },
    "query": {
        "term": { <1>
            "ftype": "file"
        }
    },
    "from": 0,
    "size": 100
}'

<1>處的query中,使用matchterm效果是一樣的,表示包含此分詞。term效能稍勝10%。
相當於SQL:

SELECT COUNT(*) AS group_by_xxoo FROM index-1.type-x WHERE ftype=’file’ GROUP BY stype LIMIT 0, 100;

0x03 多條件查詢bool:must、must_not、should

{
    "query": {
        "bool": {     <0>
            "must": { <1>
                "term"
: { "user": "kimchy" } }, "must_not": { "range": { "age": { "from": 10, "to": 20 } } }, "should": [ { "term": { "tag": "wow" } }, { "term": { "tag": "elasticsearch" } } ], "minimum_should_match": 1, <2> "boost": 1 <3> }, "from": 0, "size": 100 } }

<0> bool稱為query的過慮器,還有很多過慮器,如:and,or,not,limit
<1> mustmust_not,should為過慮條件,如果多個子條件,使用[],如should有兩個子條件。
<2> minimum_should_match 用於限制should的子條件匹配個數。
<3> boost表示此過慮器的權重,預設值1.0。

  • 過慮器支援巢狀 – 呆 -_=!,可以寫一個很複雜的Query-DSL.
  • 由於 Query-DSL 查詢語言過於複雜無比,關鍵字非常多。本人編不下去了。用到再記下來。

0x04 Query-DSL 常用關鍵字:

query,search_type
term,terms, match,match_phrase,multi_match,fuzzy
bool,and,or,not,limit,must,must_not,should
range,size,from,to,gt,gte,lt,lte
field,fields
aggs,count,sum,min,max,avg

-_=! 太多關鍵字,都可以出本字典了。本人又編不下去了。