Elasticsearch检索

检索文档

Mysql : select * from user where id = 1

ES : GET /atguigu/doc/1

响应:

{

  "_index" :   "megacorp",

  "_type" :    "employee",

  "_id" :      "1",

  "_version" : 1,

  "found" :    true,

  "_source" :  {

      "first_name" :  "John",

      "last_name" :   "Smith",

      "age" :         25,

      "about" :       "I love to go rock climbing",

      "interests":  [ "sports", "music" ]

  }

}

我们通过HTTP方法GET来检索文档,同样的,我们可以使用DELETE方法删除文档,使用HEAD方法检查某文档是否存在。如果想更新已存在的文档,我们只需再PUT一次。

简单检索

Mysql : select * from user

ES : GET /megacorp/employee/_search

响应内容不仅会告诉我们哪些文档被匹配到,而且这些文档内容完整的被包含在其中—我们在给用户展示搜索结果时需要用到的所有信息都有了。

全文检索

ES : GET /megacorp/employee/_search?q=haha

查询出所有文档字段值为haha的文档

搜索(模糊查询)

ES : GET /megacorp/employee/_search?q=hello

查询出所有文档字段值分词后包含hello的文档

聚合

Group by

Elasticsearch有一个功能叫做聚合(aggregations),它允许你在数据上生成复杂的分析统计。它很像SQL中的GROUP BY但是功能更强大。

举个例子,让我们找到所有职员中最大的共同点(兴趣爱好)是什么:

GET /atguigu/doc/_search

{

  "aggs": {

    "all_interests": {

      "terms": { "field": "interests" }

    }

  }

}

暂时先忽略语法只看查询结果:

{

   ...

   "hits": { ... },

   "aggregations": {

      "all_interests": {

         "buckets": [

            {

               "key":       "music",

               "doc_count": 2

            },

            {

               "key":       "forestry",

               "doc_count": 1

            },

            {

               "key":       "sports",

               "doc_count": 1

            }

         ]

      }

   }

}

我们可以看到两个职员对音乐有兴趣,一个喜欢林学,一个喜欢运动。这些数据并没有被预先计算好,它们是实时的从匹配查询语句的文档中动态计算生成的。如果我们想知道所有姓"Smith"的人最大的共同点(兴趣爱好),我们只需要增加合适的语句既可:

GET /atguigu/doc/_search

{

  "query": {

    "match": {

      "last_name": "smith"

    }

  },

  "aggs": {

    "all_interests": {

      "terms": {

        "field": "interests"

      }

    }

  }

}

 

all_interests聚合已经变成只包含和查询语句相匹配的文档了:

  ...

  "all_interests": {

     "buckets": [

        {

           "key": "music",

           "doc_count": 2

        },

        {

           "key": "sports",

           "doc_count": 1

        }

     ]

  }

 

PUT atguigu/_mapping/doc/

{

  "properties": {

    "interests": {

      "type":     "text",

      "fielddata": true

    }

  }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值