安装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正则表达式判断字符串是否是全部小写示例
Dec 25 Python
Python中实现参数类型检查的简单方法
Apr 21 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
python获得一个月有多少天的方法
Jun 04 Python
Python中字符串的修改及传参详解
Nov 30 Python
Python通过命令开启http.server服务器的方法
Nov 04 Python
python入门:这篇文章带你直接学会python
Sep 14 Python
python中eval与int的区别浅析
Aug 11 Python
python利用openpyxl拆分多个工作表的工作簿的方法
Sep 27 Python
python__new__内置静态方法使用解析
Jan 07 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php从memcache读取数据再批量写入mysql的方法
2014/12/29 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
Angular.Js的自动化测试详解
2016/12/09 Javascript
基于Nodejs利用socket.io实现多人聊天室
2017/02/22 NodeJs
Angular中的$watch方法详解
2017/09/18 Javascript
解决angularjs WdatePicker ng-model的问题
2018/09/13 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
详解vue-router 动态路由下子页面多页共活的解决方案
2019/12/22 Javascript
微信小程序实现电影App导航和轮播
2020/11/30 Javascript
编程语言Python的发展史
2014/09/26 Python
Python中类的继承代码实例
2014/10/28 Python
Python运算符重载用法实例
2015/05/28 Python
python交互式图形编程实例(三)
2017/11/17 Python
python学习之matplotlib绘制散点图实例
2017/12/09 Python
浅谈pandas中shift和diff函数关系
2018/04/08 Python
对Pyhon实现静态变量全局变量的方法详解
2019/01/11 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
2019/05/10 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
Django框架ORM数据库操作实例详解
2019/11/07 Python
web字体加载方案优化小结
2019/11/29 HTML / CSS
WoolOvers爱尔兰:羊绒、羊毛和棉针织品
2017/01/04 全球购物
澳大利亚家具和家居用品在线:BROSA
2017/11/02 全球购物
中国茶叶、茶具一站式网上购物商城:醉品茶城
2018/07/03 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
驾驶员安全责任书范本
2014/07/24 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
教师批评与自我批评(群众路线)
2014/10/15 职场文书
css样式important规则的正确使用方式
2022/06/10 HTML / CSS