安装ElasticSearch搜索工具并配置Python驱动的方法


Posted in Python onDecember 22, 2015

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
我们建立一个网站或应用程序,并要添加搜索功能,令我们受打击的是:搜索工作是很难的。我们希望我们的搜索解决方案要快,我们希望有一个零配置和一个完全免费的搜索模式,我们希望能够简单地使用JSON通过HTTP的索引数据,我们希望我们的搜索服务器始终可用,我们希望能够一台开始并扩展到数百,我们要实时搜索,我们要简单的多租户,我们希望建立一个云的解决方案。Elasticsearch旨在解决所有这些问题和更多的问题。
Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene、RESTful、分布式、面向云计算设计、实时搜索、全文搜索、稳定、高可靠、可扩展、安装+使用方便,介绍都说的很好听,好不好用拿出来遛一遛。
做了个简单测试,在两台完全一样的虚拟机上,2000万条左右数据,Elasticsearch 插入数据速度比 MongoDB 慢很多(可以忍受),但是搜索/查询速度快10倍以上,这只是单机情况,多机集群情况下 Elasticsearch 表现更好一些。以下安装步骤在 Ubuntu Server 14.04 LTS 上完成。

安装 Elasticsearch
升级系统后安装 Oracle Java 7,既然 Elasticsearch 官方推荐使用 Oracle JDK 7 就不要尝试 JDK 8 和 OpenJDK 了:

$ sudo apt-get update
$ sudo apt-get upgrade
 
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
 
$ sudo apt-get install oracle-java7-installer

加入 Elasticsearch 官方源后安装 elasticsearch:

$ wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | apt-key add -
$ sudo echo "deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main" >> /etc/apt/sources.list
 
$ sudo apt-get update
$ sudo apt-get install elasticsearch

加入到系统启动文件并启动 elasticsearch 服务,用 curl 测试一下安装是否成功:

$ sudo update-rc.d elasticsearch defaults 95 1
 
$ sudo /etc/init.d/elasticsearch start
 
$ curl -X GET 'http://localhost:9200'
{
 "status" : 200,
 "name" : "Fer-de-Lance",
 "version" : {
  "number" : "1.1.1",
  "build_hash" : "f1585f096d3f3985e73456debdc1a0745f512bbc",
  "build_timestamp" : "2014-04-16T14:27:12Z",
  "build_snapshot" : false,
  "lucene_version" : "4.7"
 },
 "tagline" : "You Know, for Search"
}

Elasticsearch 的集群和数据管理界面 Marvel 非常赞,可惜只对开发环境免费,如果这个工具也免费就无敌了,安装很简单,完成后重启服务访问 http://192.168.2.172:9200/_plugin/marvel/ 就可以看到界面:

$ sudo /usr/share/elasticsearch/bin/plugin -i elasticsearch/marvel/latest
 
$ sudo /etc/init.d/elasticsearch restart
 * Stopping Elasticsearch Server                      [ OK ]
 * Starting Elasticsearch Server                      [ OK ]

安装ElasticSearch搜索工具并配置Python驱动的方法

安装 Python 客户端驱动
和 MongoDB 一样,我们一般用程序和 Elasticsearch 交互,Elasticsearch 也支持多种语言的客户端驱动,这里仅安装 Python 驱动,其他语言可以参考官方文档。

$ sudo apt-get install python-pip
$ sudo pip install elasticsearch

写个简单程序把 gene_info.txt 的数据导入到 Elasticsearch:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
import os, os.path, sys, re
import csv, time, string
from datetime import datetime
from elasticsearch import Elasticsearch
 
def import_to_db():
  data = csv.reader(open('gene_info.txt', 'rb'), delimiter='\t')
  data.next()
 
  es = Elasticsearch()
  for row in data:
    doc = {
      'tax_id': row[0],
      'GeneID': row[1],
      'Symbol': row[2],
      'LocusTag': row[3],
      'Synonyms': row[4],
      'dbXrefs': row[5],
      'chromosome': row[6],
      'map_location': row[7],
      'description': row[8],
      'type_of_gene': row[9],
      'Symbol_from_nomenclature_authority': row[10],
      'Full_name_from_nomenclature_authority': row[11],
      'Nomenclature_status': row[12],
      'Other_designations': row[13],
      'Modification_date': row[14]
    }
    res = es.index(index="gene", doc_type='gene_info', body=doc)
 
def main():
  import_to_db()
 
if __name__ == "__main__":
  main()

Kibana 是一个功能强大的数据显示客户端,通过插件方式和 Elasticsearch 集成在一起,安装很容易,下载解压就可以了,然后重启 Elasticsearch 服务访问 http://192.168.2.172:9200/_plugin/kibana/ 就能看到界面:

$ wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
$ tar zxvf kibana-3.0.1.tar.gz
$ sudo mv kibana-3.0.1 /usr/share/elasticsearch/plugins/_site
$ sudo /etc/init.d/elasticsearch restart

安装ElasticSearch搜索工具并配置Python驱动的方法

Python 相关文章推荐
Python 中的with关键字使用详解
Sep 11 Python
详解常用查找数据结构及算法(Python实现)
Dec 09 Python
Python实现一个服务器监听多个客户端请求
Apr 12 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
django 修改server端口号的方法
May 14 Python
python实现C4.5决策树算法
Aug 29 Python
Django框架用户注销功能实现方法分析
May 28 Python
python base64库给用户名或密码加密的流程
Jan 02 Python
django模型动态修改参数,增加 filter 字段的方式
Mar 16 Python
python 读取二进制 显示图片案例
Apr 24 Python
Python 解决相对路径问题:"No such file or directory"
Jun 05 Python
如何用Python提取10000份log中的产品信息
Jan 14 Python
Python生成随机验证码的两种方法
Dec 22 #Python
基于python实现微信模板消息
Dec 21 #Python
python如何实现远程控制电脑(结合微信)
Dec 21 #Python
python从入门到精通(DAY 3)
Dec 20 #Python
python从入门到精通(DAY 2)
Dec 20 #Python
利用python代码写的12306订票代码
Dec 20 #Python
python从入门到精通(DAY 1)
Dec 20 #Python
You might like
php sprintf()函数让你的sql操作更安全
2008/07/23 PHP
一步一步学习PHP(8) php 数组
2010/03/05 PHP
php curl基本操作详解
2013/07/23 PHP
Thinkphp5框架异常处理操作实例分析
2020/06/03 PHP
Javascript 代码也可以变得优美的实现方法
2009/06/22 Javascript
jQuery 学习第六课 实现一个Ajax的TreeView
2010/05/17 Javascript
星期几的不同脚本写法(推荐)
2016/06/01 Javascript
JS全局变量和局部变量最新解析
2016/06/24 Javascript
jQuery 遍历map()方法详解
2016/11/04 Javascript
Node.js和Express简单入门介绍
2017/03/24 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
详解如何快速配置webpack多入口脚手架
2018/12/28 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python处理图片之PIL模块简单使用方法
2015/05/11 Python
Python3指定路径寻找符合匹配模式文件
2015/05/22 Python
浅谈python多线程和队列管理shell程序
2015/08/04 Python
各个系统下的Python解释器相关安装方法
2015/10/12 Python
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python常用库推荐
2016/12/04 Python
使用pygame模块编写贪吃蛇的实例讲解
2018/02/05 Python
Python SQL查询并生成json文件操作示例
2018/08/17 Python
Python django使用多进程连接mysql错误的解决方法
2018/10/08 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
简单的Python调度器Schedule详解
2019/08/30 Python
Python descriptor(描述符)的实现
2020/11/15 Python
不同浏览器对CSS3和HTML5的支持状况
2009/10/31 HTML / CSS
html5手机键盘弹出收起的处理
2020/01/20 HTML / CSS
门诊挂号室室长岗位职责
2013/11/27 职场文书
安全生产标语大全
2014/10/06 职场文书
入党积极分子自我批评思想汇报
2014/10/10 职场文书
2015年党总支工作总结
2015/05/25 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
Python 类,对象,数据分类,函数参数传递详解
2021/09/25 Python
JavaScript实现栈结构详细过程
2021/12/06 Javascript