zoukankan      html  css  js  c++  java
  • ES中文学习指南---入门篇

    从最简单的开始,了解索引(indexing)搜索(search)以及聚合(aggregations)

    工具:Sense插件,head插件

    让我们建立一个员工目录

    假设我们刚好在Megacorp工作,这时人力资源部门出于某种目的需要让我们创建一个员工目录,这个目录用于促进人文关怀和用于实时协同工作,所以它有以下不同的需求:

    • 数据能够包含多个值的标签、数字和纯文本。
    • 检索任何员工的所有信息。
    • 支持结构化搜索,例如查找30岁以上的员工。
    • 支持简单的全文搜索和更复杂的短语(phrase)搜索
    • 高亮搜索结果中的关键字
    • 能够利用图表管理分析这些数据

    1.直接上传文档到ES,能自动创建索引,可以在elasticsearch.yml设置里增加action.auto_create_index: false来取消自动创建索引的功能。

    我们手动插入3条数据:

    PUT /megacorp/employee/1
    {
        "first_name" : "John",
        "last_name" :  "Smith",
        "age" :        25,
        "about" :      "I love to go rock climbing",
        "interests": [ "sports", "music" ]
    }
    
    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" ]
    }

    自动创建的索引结果为:

    {
    
        "state": "open",
        "settings": {
            "index": {
                "creation_date": "1452563538027",
                "number_of_shards": "5",
                "number_of_replicas": "1",
                "uuid": "Vf1xw2nxRi20wsuByM5Yvw",
                "version": {
                    "created": "2010199"
                }
            }
        },
        "mappings": {
            "employee": {
                "properties": {
                    "about": {
                        "type": "string"
                    },
                    "last_name": {
                        "type": "string"
                    },
                    "interests": {
                        "type": "string"
                    },
                    "first_name": {
                        "type": "string"
                    },
                    "age": {
                        "type": "long"
                    }
                }
            }
        },
        "aliases": [ ]
    
    }

    2. 进行简单的搜索:

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

    返回结果:

    {
      "took": 3,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": 0.30685282,
        "hits": [
          {
            "_index": "megacorp",
            "_type": "employee",
            "_id": "2",
            "_score": 0.30685282,
            "_source": {
              "first_name": "Jane",
              "last_name": "Smith",
              "age": 32,
              "about": "I like to collect rock albums",
              "interests": [
                "music"
              ]
            }
          },
          {
            "_index": "megacorp",
            "_type": "employee",
            "_id": "1",
            "_score": 0.30685282,
            "_source": {
              "first_name": "John",
              "last_name": "Smith",
              "age": 25,
              "about": "I love to go rock climbing",
              "interests": [
                "sports",
                "music"
              ]
            }
          }
        ]
      }
    }

    3.复杂一些的搜索

    GET /megacorp/employee/_search
    {
        "query" : {
            "match" : {
                "last_name" : "Smith"
            }
        }
    }
    //查找姓smith的人,确切值查询。 GET
    /megacorp/employee/_search { "query" : { "filtered" : { "filter" : { "range" : { "age" : { "gt" : 30 } } }, "query" : { "match" : { "last_name" : "smith" } } } } }
    //查找年龄大于30并且姓smith的人。 GET
    /megacorp/employee/_search { "query" : { "match" : { "about" : "rock climbing" } } }
    //全文检索,对about字段里的clock climbing搜索结果进行相关性排序。
    返回如下:
    {
      "took": 5,
      "timed_out": false,
      "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
      },
      "hits": {
        "total": 2,
        "max_score": 0.16273327,
        "hits": [
          {
            "_index": "megacorp",
            "_type": "employee",
            "_id": "1",
            "_score": 0.16273327,
            "_source": {
              "first_name": "John",
              "last_name": "Smith",
              "age": 25,
              "about": "I love to go rock climbing",
              "interests": [
                "sports",
                "music"
              ]
            }
          },
          {
            "_index": "megacorp",
            "_type": "employee",
            "_id": "2",
            "_score": 0.016878016,
            "_source": {
              "first_name": "Jane",
              "last_name": "Smith",
              "age": 32,
              "about": "I like to collect rock albums",
              "interests": [
                "music"
              ]
            }
          }
        ]

    //精确查找并将搜索结果高亮。
    GET /megacorp/employee/_search { "query" : { "match_phrase" : { "about" : "rock climbing" } }, "highlight": { "fields" : { "about" : {} } } }
    //聚合查询↓ 数据量太大的时候会有性能的影响。 GET
    /megacorp/employee/_search { "aggs": { "all_interests": { "terms": { "field": "interests" } } } } GET /megacorp/employee/_search { "query": { "match": { "last_name": "smith" } }, "aggs": { "all_interests": { "terms": { "field": "interests" } } } } GET /megacorp/employee/_search { "aggs" : { "all_interests" : { "terms" : { "field" : "interests" }, "aggs" : { "avg_age" : { "avg" : { "field" : "age" } } } } } } } }
  • 相关阅读:
    LeetCode 258 Add Digits
    LeetCode 231 Power of Two
    LeetCode 28 Implement strStr()
    LeetCode 26 Remove Duplicates from Sorted Array
    LeetCode 21 Merge Two Sorted Lists
    LeetCode 20 Valid Parentheses
    图形处理函数库 ImageTTFBBox
    php一些函数
    func_get_arg(),func_get_args()和func_num_args()的用法
    人生不是故事,人生是世故,摸爬滚打才不会辜负功名尘土
  • 原文地址:https://www.cnblogs.com/flyingbee6/p/5123460.html
Copyright © 2011-2022 走看看