ElasticSearch(二)初識增、刪、改、查

ES中有一些名詞與非關係型數據庫很類似,因爲平常接觸關係型數據庫比較多,就來對比一下關係型數據庫和ES的名詞的含義:

ElasticSearch 關係型數據庫
索引Index 數據庫database
類型Type 表table
文檔document 行Row
屬性Field 列column

一個 Elasticsearch 集羣可以 包含多個 索引 ,相應的每個索引可以包含多個 類型 。 這些不同的類型存儲着多個 文檔 ,每個文檔又有 多個 屬性 。

增加

PUT /retail/car/1
{
	"uid": "X0Mtlfa5iB",
	"spu_id": "127",
	"surface_color": "#D7361C",
	"surface_color_name": "熔岩橙",
	"inner_color": "#000000",
	"inner_color_name": "黑色",
	"delete_mark": "0"
}

retail爲elasticSearch中的一個索引,car爲索引中的一個類型,1爲插入的文檔的id。插入的文檔具體信息如請求體所示。

創建成功:

查詢

GET retail/car/_search;

如果需要查詢特定的字段(比如uid和surface_color_name)

GET new_retail/spu/1?_source=uid,surface_color_name;

如果只需要返回_source字段,不需要任何元數據:


GET new_retail/spu/1/_source;

返回插入的文檔信息:

{

    "_index": "retail",
    "_type": "car",
    "_id": "1",
    "_version": 2,
    "found": true,
    "_source": {
        "uid": "X0Mtlfa5iB",
        "spu_id": "127",
        "surface_color": "#D7361C",
        "surface_color_name": "熔岩橙",
        "inner_color": "#000000",
        "inner_color_name": "黑色",
        "delete_mark": "0"
    }
}

ES Restful API GET、POST、PUT、DELETE、HEAD含義: 

1)GET:獲取請求對象的當前狀態。 

2)POST:改變對象的當前狀態。 

3)PUT:創建一個對象。 

4)DELETE:銷燬對象。 

5)HEAD:請求獲取對象的基礎信息。 

接下來,嘗試查詢外觀顏色(surface_color_name)包含黑色的記錄。

方法一:在請求路徑中使用 _search 端點(後文解釋),並將查詢本身賦值給參數 q=。

GET retail/car/_search?q=uid:vHK2lW0NHq

方法二:使用match查詢(查詢方法之一,後文解釋),使用請求體代替query-string參數。

GET retail/car/_search
{
        "query":{
                 "match":{
                         "surface_color_name":"黑色"
                 }
         }        
}

(注意:使用head插件進行查詢時,需要將方法改爲POST,GET是不生效的)

再來看看稍微複雜一些的搜索:

在搜索外觀顏色的基礎上,查詢spu_id小於130的記錄。

GET retail/car/_search{
     "query":{
             "bool":{
                    "must":{
                           "match":{"surface_color_name":"黑色"}
                    },
                    "filter":{
                            "range":{"spu_id":{"lt":132}}
                    }
              }
        }
}

其中包括一個range過濾器,其中lt同HTML中的標籤表示小於。

得到兩個匹配值:

{
    "took": 2,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": 2,
        "max_score": 0.68324494,
        "hits": [
         {
            "_index": "retail",
            "_type": "car",
            "_id": "3",
            "_score": 0.68324494,
            "_source": {
                "uid": "V6uKDzn3MA",
                "spu_id": "132",
                "surface_color": "#0000FF #000000",
                "surface_color_name": "藍色 黑色",
                "inner_color": "#000000 #FFFFFF",
                "inner_color_name": "黑色 白色",
                "delete_mark": "0"
            }
        },
        {
            "_index": "retail",
            "_type": "car",
            "_id": "2",
            "_score": 0.2876821,
            "_source": {
                "uid": "vHK2lW0NHq",
                "spu_id": "131",
                "surface_color": "#0000FF",
                "surface_color_name": "藍色",
                "inner_color": "#000000",
                "inner_color_name": "黑色",
                "delete_mark": "0"
            }
        }]
    }
}

其中"_score": 0.68324494 表示相關性得分,將會返回inner_color_name包含黑色、黑、色的所有記錄,只是包含黑、色的記錄相關性得分低於黑色記錄。

短語搜索:如果需要查找同時包含黑色短語的記錄,需要使用match_phrase關鍵字代替match)

高亮搜索:

GET retail/car/_search{
      "query": {
            "match":{
                  "surface_color_name":"黑色"
            }
      },
      "highlight":{
            "fields":{
                 "surface_color_name":{}
            }
       }
}

返回值多了一條高亮,其中使用<em>標籤封裝匹配的文本字段:

"highlight": {
     "surface_color_name": [
          "<em>黑</em><em>色</em> 藍<em>色</em>"
     ]
}

聚合(aggregations):

如下爲一個簡單的統計,統計surface_color_name中的個數。

GET retail/car/_search{
     "aggs":{
          "all_color":{
               "terms":{"field":"surface_color_name"}
          }
     }
}

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章