美文网首页菜鸟Python 爬虫专栏程序员
专栏:011:Elasticsearch 的使用

专栏:011:Elasticsearch 的使用

作者: 谢小路 | 来源:发表于2016-05-06 10:51 被阅读424次
    001.jpg

    用理工科思维看待这个世界

    系列爬虫专栏

    崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。

    希望我眼中的世界,是个温暖纯真的世界.

    今天的主题是:elasticsearch的使用


    0:框架

    序号 内容 说明
    01 概念 --
    02 安装及配置 --
    03 使用 --
    04 实战 --
    05 总结及说明 --

    1:概念

    • Elasticsearch
      Elasticsearch 是一个实时分布式搜索和分析引擎。

    • 特点
      分布式的实时文件存储,每个字段都被索引并可被搜索
      分布式的实时分析搜索引擎
      可以扩展到上百台服务器,处理PB级结构化或非结构化数据

    • 索引 index (数据库)
      Elasticsearch 中存储数据的行为。

    • 文档 type (表)

    • 对比

    Relation DB   -> Databases -> tables -> rows      -> columns
    Elasticsearch -> Indices   -> Types  -> Documents -> Fields
    

    2:安装

    windows 平台为例

    • 下载Elasticsearch 官网 解压安装
    • 下载JAVA官网 安装
    • 配置JAVA环境变量
      • 环境变量
        • 新建系统变量JAVA_HOME 和 CLASSPATH
        • 变量名为:JAVA_HOME
        • 变量值:C:\Program Files\Java\jdk1.8.0_65
        • 变量名:CLASSPATH
        • 变量值:%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
      • 选择“系统变量”中变量名为'path' 的环境变量,添加JAVA绝对路径
        • 变量名:path
        • 变量值:C:\Program Files\Java\jdk1.8.0_65\bin;C:\Program Files\Java\jre1.8.0_65

    验证是否配置正确JAVA环境:命令提示符下:javac

    001.png
    • 运行Elasticsearch
      目录下,命令提示符:./bin/elsticsearch
      浏览器中输入:http://localhost:9200/
    002.png
    • 安装插件:
      elasticsearch-head是一个elasticsearch的集群管理工具,它是完全由html5编写的独立网页程序
      目录下,命令提示符:.\plugin install mobz/elasticsearch-head
      浏览器中输入:http://localhost:9200/_plugin/head/
    003.png
    • 目录结构
    目录 说明
    bin 运行Elasticsearch 实例和插件管理所需的脚本
    config 配置文件所在目录
    lib Elasticsearch所使用的库
    data 存储ElasticSearch所使用的所有数据
    logs 实例运行期间产生的事件和错误信息的文件
    plugins 用于存储安装的插件
    work 临时文件

    更多操作官方网站


    3:使用

    在python中的使用为例
    需要安装elasticsearch 库

    
    # 向es中插入一条数据
    from datetime import datetime
    from elasticsearch import Elasticsearch
    es = Elasticsearch()  # 创建连接
    
    doc = {
        'author': 'kimchy',
        'text': 'Elasticsearch: cool. bonsai cool.',
        'timestamp': datetime.now(),
    }                      # 文档
    res = es.index(index="test-index", doc_type='tweet', id=1, body=doc) # 插入数据
    print(res['created'])
    

    效果:

    004.png
    # 查询所有的test-index 下的数据
    res = es.search(index="test-index", body={"query": {"match_all": {}}}) # 查询数据,返回的是JSON格式的数据
    print("Got %d Hits:" % res['hits']['total'])
    for hit in res['hits']['hits']:
        print("%(timestamp)s %(author)s: %(text)s" % hit["_source"])
    
    # output 上文插入的数据
    Got 1 Hits:
    2016-05-06T10:07:40.480466 kimchy: Elasticsearch: cool. bonsai cool.
    

    管理工具上查询显示:同样是刚才那条数据

    005.png

    4:实战

    核心代码参见专栏:009

    提供两种方式将抓取到的电影数据插入es中

    # 第一种方式:content 是每部电影的数据:包括电影名,评分数,导演等
    def save_to_es(self, content):
        global id
        data = json.dumps(content)
        url = "http://localhost:9200/exercise/douban/" + str(id)
        body = requests.post(url, data)
        id += 1
    #......
    if __name__ == "__main__":
        url = "https://movie.douban.com/top250?start=0&filter="
        Start = DouBanTop()
        urls = Start.urls()
        for one_url in urls:
            one_page_content = Start.get_content(one_url)
            all_data = Start.content_json(one_page_content)
            for one in all_data:
                Start.save_to_es(one)
    
    # 第二种使用elasticsearch库
    def save_to_es2(self, content):
        es = Elasticsearch()
        global id
        data = json.dumps(content)
        res = es.index(index="exercise", doc_type="douban", id = id, body = data)
        id +=1
    #............
    if __name__ == "__main__":
        url = "https://movie.douban.com/top250?start=0&filter="
        Start = DouBanTop()
        urls = Start.urls()
        for one_url in urls:
            one_page_content = Start.get_content(one_url)
            all_data = Start.content_json(one_page_content)
            for one in all_data:
                Start.save_to_es2(one)
    

    效果显示:

    006.png

    查询效果显示:

    007.png

    完整版代码代码


    5:参考及总结

    参考文献:

    1. elasticsearch文档
    2. CSDN博客
    3. 官方网站

    Github:github
    搭建了一个博客:博客

    IT初学者.


    相关文章

      网友评论

      • 磨人的小妖精九斤:大兄,我觉得这个一定要标注你使用的是什么版本的 这非常重要 😄
        谢小路:@磨人的小妖精九斤 看官网吧,我用的是2.3.2 ,mac系统我不熟悉,...https://www.elastic.co/downloads/elasticsearch
        磨人的小妖精九斤:@谢小路 你那边是咋下载的啊 官网上最新的是5.0的测试了吧 我mac上homebrew是2.2的版本 因为感觉是后面使用kibana还有其他的版本蛮重要的
        谢小路:@磨人的小妖精九斤 好的,下回注意下...

      本文标题:专栏:011:Elasticsearch 的使用

      本文链接:https://www.haomeiwen.com/subject/wtcjrttx.html