安装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实现字典依据value排序
Feb 24 Python
Python数据结构之翻转链表
Feb 25 Python
PyQt5+requests实现车票查询工具
Jan 21 Python
Python 3 判断2个字典相同
Aug 06 Python
Python数学形态学实例分析
Sep 06 Python
python飞机大战pygame游戏之敌机出场实现方法详解
Dec 17 Python
Python操作redis和mongoDB的方法
Dec 19 Python
Pyecharts绘制全球流向图的示例代码
Jan 08 Python
Pytorch在dataloader类中设置shuffle的随机数种子方式
Jan 14 Python
python实现梯度法 python最速下降法
Mar 24 Python
如何利用Python识别图片中的文字
May 31 Python
去除python中的字符串空格的简单方法
Dec 22 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
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php更新mysql后获取影响的行数发生异常解决方法
2013/03/28 PHP
PHP获取当前日期和时间及格式化方法参数
2015/05/11 PHP
PHP模板引擎Smarty内建函数section,sectionelse用法详解
2016/04/11 PHP
php好代码风格的阶段性总结
2016/06/25 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
JQueryEasyUI Layout布局框架的使用
2013/04/08 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
一些老手都不一定知道的JavaScript技巧
2014/05/06 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
Js+Ajax,Get和Post在使用上的区别小结
2016/06/08 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】
2017/08/18 Javascript
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue中通过vue-router实现命名视图的问题
2020/04/23 Javascript
Vue + Element-ui的下拉框el-select获取额外参数详解
2020/08/14 Javascript
python实现目录树生成示例
2014/03/28 Python
python设置检查点简单实现代码
2014/07/01 Python
Python生成随机密码
2015/03/10 Python
简单介绍Python中的filter和lambda函数的使用
2015/04/07 Python
python+selenium+autoit实现文件上传功能
2017/08/23 Python
python定向爬取淘宝商品价格
2018/02/27 Python
解决py2exe打包后,总是多显示一个DOS黑色窗口的问题
2019/06/21 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Ubuntu20下的Django安装的方法步骤
2021/01/24 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
英语师范专业毕业生自荐信
2013/09/21 职场文书
政府四风问题整改措施
2014/10/04 职场文书
2015年银行柜员工作总结报告
2015/04/01 职场文书
好段摘抄大全(48句)
2019/08/08 职场文书
AngularJS实现多级下拉框
2022/03/25 Javascript
Redis数据同步之redis shake的实现方法
2022/04/21 Redis