ElasticSearch介紹與簡單語法

ElasticSearch

  • 倒排索引

命令(能夠經過Kibana-Devtools-Console)

一、健康狀態

GET /_cat/health?v

結果以下java

epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 
1509779009 15:03:29 elasticsearch yellow 1 1 1 1001 0 - 50.0%

二、查看索引

GET /_cat/indices?v

三、建立索引

PUT /test?pretty

四、刪除索引

DELETE /test?pretty

五、新增文檔並創建索引

語法爲:node

PUT /index/type/id
{
  "json數據"
}
  • index:指索引名
  • type:指索引的類型
  • id:是這條數據的id。

例如:(添加和修改是同一個請求)mysql

PUT /goods/book/1
{
    "name" : "深刻理解java虛擬機",
    "price" :  100
}

六、查詢指定商品

GET /goods/book/1

七、刪除指定商品

DELETE  /goods/book/1

八、查詢全部商品

GET  /goods/book/_search

返回參數以下c++

  • took:耗費了幾毫秒
  • timed_out:是否超時,這裏是沒有
  • _shards:數據拆成了5個分片,因此對於搜索請求,會打到全部的primary shard(或者是它的某個replica shard也能夠)
  • hits.total:查詢結果的數量,3個document
  • hits.max_score:score的含義,就是document對於一個search的相關度的匹配分數,越相關,就越匹配,分數也高
  • hits.hits:包含了匹配搜索的document的詳細數據

九、query sring search

GET /goods/book/_search?q=name:java&sort=price:desc

不建議使用。web

十、query DSL(Domain Specified Language,特定領域的語言)

查詢全部的商品sql

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

查詢名稱包含java的商品,同時按照價格降序排序json

GET /goods/book/_search
{
    "query" : {
        "match" : {
            "name" : "java"
        }
    },
    "sort": [ 
        { "price": "desc" }
    ]
}

分頁查詢商品,總共3條商品,假設每頁就顯示1條商品,如今顯示第2頁,因此就查出來第2個商品elasticsearch

GET /goods/book/_search
{
  "query": { "match_all": {} },
  "from": 1,
  "size": 1
}

指定要查詢出來商品的名稱和價格就能夠.net

GET /goods/book/_search
{
  "query": { "match_all": {} },
  "_source": ["name", "price"]
}

十一、query filter

搜索商品名稱包含NB,並且售價大於300元的商品插件

GET /goods/book/_search
{
    "query" : {
        "bool" : {
            "must" : {
                "match" : {
                    "name" : "java"
                }
            },
            "filter" : {
                "range" : {
                    "price" : { "gt" : 300 }
                }
            }
        }
    }
}

十二、full-text search(全文檢索)

POST /goods/book/2 
{ 
    "name" : "c++", 
    "price" : 220
}

而後再來查詢,name這個字段,會先被拆解,創建倒排索引 :

GET /shores/product/_search
{
    "query" : {
        "match" : {
            "name" : "c++"
        }
    }
}

1三、phrase search(短語搜索)

跟全文檢索相對應,相反,全文檢索會將輸入的搜索串拆解開來,去倒排索引裏面去一一匹配,只要能匹配上任意一個拆解後的單詞,就能夠做爲結果返回 phrase search,要求輸入的搜索串,必須在指定的字段文本中,徹底包含如出一轍的,才能夠算匹配,才能做爲結果返回

GET /shores/product/_search
{
    "query" : {
        "match_phrase" : {
            "name" : "java"
        }
    }
}

1四、highlight search(高亮搜索結果)

GET /shores/product/_search
{
    "query" : {
        "match" : {
            "name" : "java"
        }
    },
    "highlight": {
        "fields" : {
            "name" : {}
        }
    }
}

狀態

  • green:每一個索引的primary shard和replica shard都是active狀態的
  • yellow:每一個索引的primary shard都是active狀態的,可是部分replica shard不是active狀態,處於不可用的狀態
  • red:不是全部索引的primary shard都是active狀態的,部分索引有數據丟失了

document的核心元數據

一、_index元數據

  • (1)表明一個document存放在哪一個index中
  • (2)相似的數據放在一個索引,非相似的數據放不一樣索引:product index(包含了全部的商品),sales index(包含了全部的商品銷售數據),inventory index(包含了全部庫存相關的數據)。若是你把好比product,sales,human resource(employee),全都放在一個大的index裏面,好比說company index,不合適的。
  • (3)index中包含了不少相似的document:相似是什麼意思,其實指的就是說,這些document的fields很大一部分是相同的,你說你放了3個document,每一個document的fields都徹底不同,這就不是相似了,就不太適合放到一個index裏面去了。
  • (4)索引名稱必須是小寫的,不能用下劃線開頭,不能包含逗號:product,website,blog

二、_type元數據

  • (1)表明document屬於index中的哪一個類別(type)
  • (2)一個索引一般會劃分爲多個type,邏輯上對index中有些許不一樣的幾類數據進行分類:由於一批相同的數據,可能有不少相同的fields,可是仍是可能會有一些輕微的不一樣,可能會有少數fields是不同的,舉個例子,就好比說,商品,可能劃分爲電子商品,生鮮商品,日化商品,等等。
  • (3)type名稱能夠是大寫或者小寫,可是同時不能用下劃線開頭,不能包含逗號

三、_id元數據

  • (1)表明document的惟一標識,與index和type一塊兒,能夠惟一標識和定位一個document
  • (2)咱們能夠手動指定document的id(put /index/type/id),也能夠不指定,由es自動爲咱們建立一個id

拓展

相關文章
相關標籤/搜索