ElasticSearch基础用法

创建

PUT /megacorp/employee/2
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}

PUT /megacorp/employee/3
{
    "first_name" :  "Douglas",
    "last_name" :   "Fir",
    "age" :         35,
    "about":        "I like to build cabinets",
    "interests":  [ "forestry" ]
}

查询

GET /megacorp/employee/2/

查询所有

GET /megacorp/employee/_search

简单搜索

GET /megacorp/employee/_search?q=last_name="Smith"

表达式搜索

GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}

过滤器

  • filter 过滤器
GET /megacorp/employee/_search
{
    "query" : {
        "bool": {
            "must": {
                "match" : {
                    "last_name" : "smith" 
                }
            },
            "filter": {
                "range" : {
                    "age" : { "gt" : 30 } 
                }
            }
        }
    }
}

全文搜索

  • _score 相关性得分
GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

  • 这是一个很好的案例,阐明了 Elasticsearch 如何 在 全文属性上搜索并返回相关性最强的结果。Elasticsearch中的 相关性 概念非常重要,也是完全区别于传统关系型数据库的一个概念,数据库中的一条记录要么匹配要么不匹配。

短语搜索

  • 找出一个属性中的独立单词是没有问题的,但有时候想要精确匹配一系列单词或者短语 。 比如, 我们想执行这样一个查询,仅匹配同时包含 “rock” 和 “climbing” ,并且 二者以短语 “rock climbing” 的形式紧挨着的雇员记录。
  • 为此对 match 查询稍作调整,使用一个叫做 match_phrase 的查询:
GET /megacorp/employee/_search
{
  "query":{
    "match_phrase": {
      "about": "rock climbing"
    }
  }
}


GET /students/_doc/_search
{
  "query":{
    "match_phrase":{
        "name":"孙狮勤"
    }
  }
}

高亮搜索

  • 许多应用都倾向于在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch 中检索出高亮片段也很容易。
  • 再次执行前面的查询,并增加一个新的 highlight 参数:
GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    },
    "highlight": {
        "fields" : {
            "about" : {}
        }
    }
}

分析

  • Elasticsearch 有一个功能叫聚合(aggregations),允许我们基于数据生成一些精细的分析结果。聚合与 SQL 中的 GROUP BY 类似但更强大。
GET /megacorp/employee/_search
{
  "aggs": {
    "all_interests": {
      "terms": { 
        "field": "interests.keyword" 
      }
    }
  }
}

  • 查询结果中进行分析
GET /megacorp/employee/_search
{ 
  "query":{
    "match_phrase": {
      "about": "rock climbing"
    }
  },
  "aggs": {
    "all_interests": {
      "terms": { 
        "field": "interests.keyword" 
      }
    }
  }
}
  • 聚合还支持分级汇总。比如,查询特定兴趣爱好员工的平均年龄:
GET /megacorp/employee/_search
{
  "aggs" : {
      "all_interests" : {
          "terms" : { "field" : "interests.keyword" },
          "aggs" : {
              "avg_age" : {
                  "avg" : { "field" : "age" }
              }
          }
      }
  }
}

参考

  • 视频
  • https://www.elastic.co/guide/cn/elasticsearch/guide/current/_next_steps.html

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *