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"}
          }
     }
}

猜你喜欢

转载自blog.csdn.net/qq_35212825/article/details/81486534