Elasticsearch详解

Elasticsearch的使用

ES字段的含义

名称含义对应在mysql中的含义
index索引数据库
type类型
document文档
fields字段

1.索引(Index)
Elasticsearch索引是一组具有共同特征的文档集合。每个索引(index)包含多个类型(type),这些类型依次包含多个文档(document),每个文档包含多个字段(Fields)。在Elasticsearch中索引由多个JSON文档组成。在Elasticsearch集群中可以有多个索引。
在ELK中,当logstash的JSON文档被发送给Elasticsearch时,它们被发送为默认的索引模式“logstash-%{+YYYY.mm.dd}”。它按日划分索引,以便在需要时可以方便地搜索和删除索引。这个模式可以在日志存储的输出插件中改变。

2.文档(document)
Elasticsearch文档是一个存储在索引中的JSON文档。每个文档都有一个类型和对应的ID,这是惟一的。
3.字段(Field)
文档内的一个基本单位,键值对形式(book_name : “learning elk”)

4.类型(Type)
类型用于在索引中提供一个逻辑分区。它基本上表示一类类似类型的文档。一个索引可以有多个类型,我们可以根据上下文来解除它们。

5.映射(Mapping)
映射用于映射文档的每个field及其对应的数据类型,例如字符串、整数、浮点数、双精度数、日期等等。在索引创建过程中,elasticsearch会自动创建一个针对fields的映射,并且根据特定的需求类型,可以很容易地查询或修改这些映射。

6.分片(Shard)
分片是实际的物理实体用于存储每个索引的数据。每个索引都可以有大量的主和复制分片。分片分布在集群中的所有节点中,可以在节点故障或新节点添加时从一个节点移动到另一个节点。

7.主分片(Primary shard)与备份分片(replica shard)
备份分片通常驻留在一个不同的节点上,而不是主碎片,在故障转移和负载平衡的情况下,可以满足多个请求。

8.集群(Cluster)
集群是存储索引数据的节点集合。elasticsearch提供了水平的可伸缩性用以存储集群中的数据。每个集群都由一个集群名称来表示,不同的节点指明集群名称连接在一起。集群名称在elasticsearch.yml中的clustersearch.name的属性设置,它默认为“elasticsearch”:

9.节点(Node)
节点是一个单独运行的elasticsearch实例,它属于一个集群。默认情况下,elasticsearch中的每个节点都加入名为“elasticsearch”的集群。每个节点都可以在elasticsearch中使用自己的elasticsearch.yml,它们可以对内存和资源分配有不同的设置。

语句讲解

  • 根据时间查询的代码:
GET smetrend_date/info/_search
{
  "query": {
    "range": {
      "publish_date": {
        "gte": "2018-01-08",
        "lte": "2019-12-12",
        "format": "yyyy-MM-dd"
      }
    }
  }
}
  • 查询前200字频率的出现的次数
POST smetrend_date/info/_search
{
   "size" : 0,  
    "aggs" : {   
        "messages" : {   
            "terms" : {   
               "size" : 100,
              "field" : "text_summary"
            }  
        }  
    }
}
  • 查询前200词频率的出现的次数
GET smetrend_date/info/_search
{
  "size": 0,
  "aggs": {
    "messages": {
      "terms": {
        "size": 200,
        "field": "text_summary",
        "include": "[\u4E00-\u9FA5][\u4E00-\u9FA5]"
      }
    }
  },
  "highlight": {
    "fields": {
      "text_summary": {}
    }
  }
}
  • 查询不含国家二字的统计
GET smetrend_date/info/_search
{  
    "size" : 0,
    "aggs" : {   
        "messages" : {  
            "terms" : {   
              "size" : 200,
              "field" : "text_summary",
              "include" : "[\u4E00-\u9FA5][\u4E00-\u9FA5]",
              "exclude" : "国家.*"
            }  
        }  
    },
   "highlight": {
     "fields": {
      "text_summary": {}
    }
  }     
}
  • 时间范围与二字关键词混合搜索
GET smetrend_date/info/_search
{
  "query": {
    "range": {
      "publish_date": {
        "gte": "2018-12-08",
        "lte": "2018-12-12",
        "format": "yyyy-MM-dd"
      }
    }
  },
  "aggs": {
    "messages": {
      "terms": {
        "size": 200,
        "field": "text_summary",
        "include": "[\u4E00-\u9FA5][\u4E00-\u9FA5]",
        "exclude": "国家.*"
      }
    }
  }
}

python脚本操作ES数据

import re
from elasticsearch import Elasticsearch
from bs4 import BeautifulSoup
import time

es = Elasticsearch([
    {'host': '192.168.1.126'},
    {'host': 'othernode', 'port': 9200, 'url_prefix': 'es', 'use_ssl': True},
])

body="""{
  "query": {
    "range": {
      "publish_date": {
        "gte": "2017-01-01",
        "lte": "2017-06-30",
        "format": "yyyy-MM-dd"
      }
    }
  },
  "aggs": {
    "messages": {
      "terms": {
        "size": 800,
        "field": "text_summary",
        "include": ["服务", "*****输入查询的关键词"]
       , "order": {
         "_term": "desc"
       }
      }
    }
  }
}"""

result=es.search(index='smetrend_date', doc_type='info',body=body)
aggs=result['aggregations']
messages=aggs['messages']
buckets=messages['buckets']
# 数据获取存入excel
list_all=[]
list_all2=[]
for bucket in buckets:
    list_i=[]
    key_word=bucket['key']
    count=bucket['doc_count']
    list_i.append(key_word)
    list_i.append(count)
    list_all.append(list_i)
    list_all2.append(key_word)
    list_all2.append(count)
    
print(len(list_all))
print(len(list_all2))
    
dic = dict(zip(list_all2[::2], list_all2[1::2]))
list_key=["服务", "*****输入查询的关键词"]

list_keyword=[]
for key_i in list_key:
    list_i=[]
    list_i.append(key_i)
    list_i.append(dic[key_i])
    list_keyword.append(list_i)


for i in list_keyword:
    print(i)
    

from pandas import DataFrame

data_result=DataFrame(list_keyword)
data_result.to_excel("2017_shang.xlsx")

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值