elasticsearch基础用法

关于 elasticsearch 的背景和与常规关系型数据库的概念区分自行查找

一、安装elasticsearch

brew install elasticsearch

如果报错,按照提示先安装java相关环境。没有梯子基本可以放弃。

二、安装kibana
  1. brew install kibana
  2. brew services start kibana
  3. 浏览器访问 http://localhost:5601 -> Dev Tools
三、索引index
  1. 创建名为 my_index 的索引 PUT my_index
  2. 查看索引信息 GET my_index/_settings
  3. 删除索引 DELETE my_index
四、类型type
  1. 在 6+ 版本只可创建一个,在 7+ 版本不再可以创建(会给一个默认的)。
  2. 本文介绍中不用特意创建 type
五、文档Document
  1. 创建数据行

    PUT my_index/my_type/1
    {
          
          
      "id":1,
      "name":"Alice",
      "date":"2020-01-01",
      "like": "apple and orange"
    }
    

    其中 my_index 为索引,my_type为类型,1为文档id。请求方式可以为PUTPOST
    文档id可以指定,也可以自动生成, 必须使用POST

    POST my_index/my_type
    {
          
          
      "id":2,
      "name":"Bob",
      "date":"2020-01-01",
      "like":"banana and pear"
    }
    

    查看一下 GET my_index/_search,观察 _id 字段。Bob的为 AXBXHlWdGy6roZEZWR9P

  2. 查看数据行。
    已知 id, 单独查看 Bob 信息 GET my_index/my_type/AXBXHlWdGy6roZEZWR9P

    {
          
          
     "_index": "my_index",
     "_type": "my_type",
     "_id": "AXBXHlWdGy6roZEZWR9P",
     "_version": 1,
     "found": true,
     "_source": {
          
          
       "id": 1102,
       "name": "Bob",
       "date": "2020-01-02"
     }
    }
    

    只查看数据行内容 GET my_index/my_type/AXBXHlWdGy6roZEZWR9P/_source
    只查看idname 字段内容GET my_index/my_type/AXBXHlWdGy6roZEZWR9P/_source?_source=id,name

  3. 更新数据行
    elasticsearch 的更新是标记旧文档为删除(在过后某个时间点删除),不可访问,创建一个新文档并索引。
    (1)更新整行数据,方式与创建相同。
    (2)单独更新某个字段

    PUT my_index/my_type/1/_update
    {
          
          
      "doc":{
          
          
        "id":1103
      }
    }
    
六、结果解析

GET my_index/_search

{
    
    
  "took": 0,
  "timed_out": false,
  "_shards": {
    
    
    "total": 5,
    "successful": 5,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    
    
    "total": 2,
    "max_score": 1,
    "hits": [
      {
    
    
        "_index": "my_index",
        "_type": "my_type",
        "_id": "AXBXHlWdGy6roZEZWR9P",
        "_score": 1,
        "_source": {
    
    
          "id": 1102,
          "name": "Bob",
          "date": "2020-01-02",
          "like": "banana and pear"
        }
      },
      {
    
    
        "_index": "my_index",
        "_type": "my_type",
        "_id": "1",
        "_score": 1,
        "_source": {
    
    
          "id": 1101,
          "name": "Alice",
          "date": "2020-01-01",
          "like": "apple and orange"
        }
      }
    ]
  }
}
  1. took
    整个搜索请求花费的毫秒数。
  2. timed_out
    查询超时与否。可以进行限制 GET /_search?timeout=10msGET /_search?timeout=1s, 将返回在请求超时前收集到的结果。(需要注意的是 timeout 不会停止执行查询,它仅仅告诉你目前顺利返回结果的节点然后关闭连接。在后台,其他分片可能依旧执行查询,尽管结果已经被发送)
  3. _shards
    参与查询的分片数( total 字段),有多少是成功的( successful 字段),有多少的是失败的( failed 字段)
  4. hits
    total 字段来表示匹配到的文档总数;
    max_score 指的是所有文档匹配查询中 _score 的最大值;
    hits 数组默认包含了匹配到的前10条数据。每个节点都有一个 _score 字段,这是相关性得分,它衡量了文档与查询的 匹配程度,数组按照 _score 降序排列。可以使用 sizefrom 设置返回结果数和偏移量 GET my_index/_search?size=1&from=1
七、搜索-简易查询字符串

不建议直接暴露查询字符串搜索给用户,除非这些用户对于你的数据和集群可信。

  1. 字段 like 包含 apple GET my_index/my_type/_search?q=like:apple
  2. 字段 name 包含 Alice 或者 字段 id 为 1102 GET my_index/_search?q=+name:Alice +id:1102
  3. 字段 name 包含 Alice 或者 字段 id 不为 1103 GET my_index/_search?q=+name:Alice -id:1103
  4. 字段 name 包含 Alice 或包含 Bob GET my_index/my_type/_search?q=name:(Alice Bob)
  5. 字段 date >= ‘2020-01-02’ GET my_index/my_type/_search?q=date:>=2020-01-02
八、搜索-结构化查询

GET 提交查询请求更好,但因为 GET 携带交互数据不被很好支持,因此 search API 也支持 POST。

  1. term 过滤。用于精确匹配哪些值,比如数字,日期,布尔值或 not_analyzed 的字符串。
    POST my_index/my_type/_search 
    {
          
           
      "query": {
          
          
        "term": {
          
          "id": 1102}
      }
    }
    
  2. terms过滤。类似 term,字段指定多个值,相当于 in 。
    POST my_index/my_type/_search 
    {
          
           
      "query": {
          
          
        "terms": {
          
           "id": [1102, 1103]}
      }
    }
    
  3. range过滤。范围查找。
    POST my_index/my_type/_search 
    {
          
           
      "query": {
          
          
        "range": {
          
          
          "date": {
          
          
            "gte": "2020",
            "lt": "2020-01-02"
          }
        }
      }
    }
    
  4. match查询
    做精确匹配搜索时,最好用过滤语句,因为过滤语句可以缓存数据.
    POST my_index/my_type/_search 
    {
          
           
      "query": {
          
          
        "match": {
          
          "like": "apple"}
      }
    }
    
  5. multi_match查询
    POST my_index/my_type/_search 
    {
          
           
      "query": {
          
          
        "multi_match": {
          
          "like": ["apple", "banana"]}
      }
    }
    
  6. 其他
    size 和 from
    POST my_index/my_type/_search
    {
          
           
      "query": {
          
          },
      "size": 1,
      "from": 0
    }
    
    只返回特定字段
    POST my_index/my_type/_search
    {
          
           
      "query": {
          
          },
      "_source": ["id", "name"]
    }		
    
三、安装ik中文分词器
  1. 通过elasticsearch-plugin安装,注意elasticsearch版本号和ik版本号对应,本次安装版本号5.6.15
    /usr/local/Cellar/[email protected]/5.6.15/bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v5.6.15/elasticsearch-analysis-ik-5.6.15.zip

  2. 停止elasticsearch, 使用启动方式二重新启动。在启动信息中找到加载ik这一行
    在这里插入图片描述

  3. brew info elasticsearch查看相关信息目录,找到
    Config: /usr/local/etc/elasticsearch/
    进入目录cd /usr/local/etc/elasticsearch/analysis-ik,其中 IKAnalyzer.cfg.xml文件为配置字典文件

猜你喜欢

转载自blog.csdn.net/z772532526/article/details/103913216
今日推荐