当前位置:首页 > 开发 > 行业应用 > 正文

ElasticSearch的python使用--pyes

发表于: 2013-08-06   作者:薰衣草之子   来源:转载   浏览:
摘要: 问题描述:ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。在工作中的后台网站要提供基于ElasticSearch的后台服务,而后台的主要语言工具是python,操作ElasticSearch要用到pyes库,就需要了解里面的函数,英文API不好懂

问题描述:ElasticSearch是一个基于Lucene构建的开源,分布式,RESTful搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。支持通过HTTP使用JSON进行数据索引。在工作中的后台网站要提供基于ElasticSearch的后台服务,而后台的主要语言工具是python,操作ElasticSearch要用到pyes库,就需要了解里面的函数,英文API不好懂,个人根据理解做了些测试。

 

环境工具:python2.6  ElasticSearch0.90.2  pyes

 

解决过程:1. 使用pip install pyes 或者 easy_install pyes安装pye
                   2. 测试使用pyes官方文档或者其他pyes文档的API的增删改
import pyes
conn = pyes.ES('127.0.0.1:9200')
conn.create_index("human") #human 是一个新的索引库,相当于create database操作
mapping = {u'firstname': {'index': 'analyzed', #使用分词器
                      'type': u'string',
                  'analyzer':'ik'}, #分词器为ik
           u'lastname': {'index': 'not_analyzed',
                     'type': u'string'},
       u'age': {'index': 'not_analyzed', #不使用分词器
              'type': u'long'}} #mapping 是字段,相当于数据库的表的列名
conn.put_mapping("man", {'properties':mapping}, ["human"]) #在human库中创建man,相当于create table操作
conn.put_mapping("woman", {'properties':mapping}, ["human"]) #woman同样相当于一张表
conn.index({'firstname':'David', 'lastname':'White', 'age':18}, 'human', 'man', 'David White', True) #向human的man中添加索引数据,相当于insert into操作
conn.index({'firstname':'Suzan', 'lastname':'Black', 'age':28}, 'human', 'woman', 'Suzan Black', True) #向human的woman中添加索引数据
conn.index({'firstname':'Uni', 'lastname':'Lavender', 'age':18}, 'human', 'man', 'Uni Lavender', True)
conn.index({'firstname':'Jann', 'lastname':'White', 'age':18}, 'human', 'woman', 'Jann White', True)
conn.index({'firstname':'Suzan', 'lastname':'White', 'age':18}, 'human', 'woman', 'Suzan White', True) #注意第四个参数是index的id,具有唯一性,因此更新数据,可以按照id使用index即可conn.index({'firstname':'Jann', 'lastname':'White', 'age':28}, 'human', 'woman', 'Jann White', True) #将年龄由18更新到28

 

                   3. 测试使用pyes官方文档的API的查询

使用res = conn.search(pyes.BoolQuery(must=must), 'human', 'woman', start=0, size=10, sort='age')查询,支持分页

        a. 查找firstname为Suzan的女人的index数据

条件:must = pyes.StringQuery('Suzan', ['firstname',]) #must = pyes.StringQuery('Suzan', 'firstname')

相当于sql查询 select * from human.woman where firstname regexp '[^a-zA-Z]Suzan[^a-zA-Z]'

        b. 查找lastname为white的女人的index数据

条件:must = pyes.StringQuery('White', ['lastname',]) #must = pyes.StringQuery('White', ['lastname',])或者must = pyes.TermQuery('lastname', 'White')

相当于sql查询 select * from human.woman where lastname = 'White'

        c. 查找age为18,20,28的女人的index数据

条件:must = pyes.TermsQuery('age', [18,28])

相当于sql查询 select * from human.woman where age=18 or age = 28

        d. 查找age为18,28并且firstname为Suzan的女人的index数据

条件:must = [pyes.TermsQuery('age', [18,28]), pyes.StringQuery('Suzan', 'firstname')]

相当于sql查询 select * from human.woman where (age=18 or age = 28) and firstname = 'Suzan'

        e. 查找firstname或者lastname中出现Rich单词的女人的index数据

条件:must = pyes.StringQuery('Suzan', ['firstname',‘lastname’], default_operator='or')

相当于sql查询 select * from human.woman where firstname regexp '[^a-zA-Z]Suzan[^a-zA-Z]' or lastname regexp '[^a-zA-Z]Suzan[^a-zA-Z]'

        f. 查找firstname并且lastname中出现Rich单词的女人的index数据

条件:must = pyes.StringQuery('Suzan', ['firstname',‘lastname’], default_operator='and')

相当于sql查询 select * from human.woman where firstname regexp '[^a-zA-Z]Suzan[^a-zA-Z]' and lastname regexp '[^a-zA-Z]Suzan[^a-zA-Z]'

        g. 查找年龄在18到28之间的女人的index数据

条件:must = pyes.RangeQuery(pyes.ESRange('age', from_value=18, to_value=28))

相当于sql查询 select * from human.woman where age between 18 and 28 ]

        h. 查找以Whi开头的lastname的女人的index数据

条件:must = pyes.PrefixQuery('lastname', 'Whi')

相当于sql查询 select * from human.woman where lastname like 'Whi%'

(未完待续.....)

 

搜索小知识:可以借助百度实现站内全文搜索,将http://www.baidu.com/s?wd=网络中心&pn=10&ct=2097152&ie=utf-8&si=www.stcsm.gov.cn&format=json(绿色部分替换成关键词,红色部分替换站内地址)

ElasticSearch的python使用--pyes

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
1. PUT形式创建索引: curl -XPUT 'http://127.0.0.1:9200/mengka/age/25' -d '{"name":"hyy0441013
ES的Hadoop插件,总共有3个,我们要使用的是 hadoop HDFS Snapshot/Restore plugin,它主要用于备份
elasticsearch java API 官网: http://www.elasticsearch.org/guide/en/elasticsearch/client/java
Elasticsearch 是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene、RESTful、分
Elasticsearch是开源搜索平台的新成员,实时数据分析的神器,发展迅猛,基于 Lucene、RESTful、分布
【零】简介 Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,分布式,十分高效。 主要的
1.ES的安装与环境配置 首先请先去了解下ES的一些基本概念:cluster,node,index,shard,replica s
Elasticsearch是一种先进的,高性能的,可扩展的开源搜索引擎,提供全文搜索和实时分析的结构化和非
ES虽然有Bigdesk插件进行监控,但是JVM调优的时候,还是习惯了用JConsole监控。 ES的JVM参数,可以
bigdesk是elasticsearch的一个集群监控工具,可以通过它来查看es集群的各种状态,如:cpu、内存使用
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号