elasticsearch的基本用法 | 阿小信的博客
阿小信大人的头像
做你说过的,说你能做的 阿小信大人

elasticsearch的基本用法2014-09-02 06:36

安装运行

http://www.elasticsearch.org/download/ 下载elasticsearch,解压后有三个文件夹:bin是运行的脚本,config是设置文件,lib是放依赖。

单机运行:bin/elasticsearch -f

ubuntu apt安装:

wget -qO - https://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -
sudo add-apt-repository "deb http://packages.elasticsearch.org/elasticsearch/1.4/debian stable main"
sudo apt-get update && sudo apt-get install elasticsearch
sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start

进入elasticsearch目录安装插件:

cd elasticsearch/bin
sudo ./plugin -install mobz/elasticsearch-head
sudo ./plugin -i elasticsearch/marvel/latest

这样访问http://localhost:9200/_plugin/head/可以查看elasticsearch的信息

http://localhost:9200/_plugin/marvel/

http://localhost:9200/_plugin/marvel/sense/

基本操作

在elasticsearch中,index相当于数据库的database,tag相当于数据库的table。使用curl来进行客户端操作。

创建(twitter:index, user/tweet:type, kimchy/1:id, -d:data to send, '(json data to send)'):

curl -XPUT 'http://localhost:9200/twitter/user/kimchy' -d '{ "name" : "Shay Banon" }'

curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '
{ 
    "user": "kimchy", 
    "postDate": "2009-11-15T13:12:00", 
    "message": "Trying out Elastic Search, so far so good?" 
}'

curl -XPUT 'http://localhost:9200/twitter/tweet/2' -d '
{ 
    "user": "kimchy", 
    "postDate": "2009-11-15T14:12:12", 
    "message": "Another tweet, will it be indexed?" 
}'

查看:

curl -XGET 'http://localhost:9200/twitter/user/kimchy?pretty=true'
curl -XGET 'http://localhost:9200/twitter/tweet/1?pretty=true'
curl -XGET 'http://localhost:9200/twitter/tweet/2?pretty=true'

搜索:

curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy&pretty=true'
curl -XGET 'http://localhost:9200/twitter/tweet/_search?pretty=true' -d '
{ 
    "query" : { 
        "text" : { "user": "kimchy" }
    } 
}'
curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -d '
{ 
    "query" : { 
        "matchAll" : {} 
    } 
}'
curl -XGET 'http://localhost:9200/twitter/_search?pretty=true' -d '
{ 
    "query" : { 
        "range" : { 
            "postDate" : { "from" : "2009-11-15T13:00:00", "to" : "2009-11-15T14:00:00" } 
        } 
    } 
}'
curl -XGET 'http://localhost:9200/kimchy,another_user/_search?pretty=true' -d '
{ 
    "query" : { 
        "matchAll" : {} 
    } 
}'

更新:

curl -XPUT localhost:9200/twitter/user/kimchy -d { ...(data)... }

删除:

curl -XDELETE localhost:9200/twitter

集成中文分词插件没能安装成功,貌似ik和mmseg for elasticsearch的页面找不到了,但是有elasticsearch-rtf版可以尝试ready to fly~无需任何配置:https://github.com/medcl/elasticsearch-rtf

python操作elasticsearch:

#coding:utf-8

import pyes


conn = pyes.ES(['127.0.0.1:9200'])#连接es

def creat():

    conn.create_index('test-index')#新建一个索引

    #定义索引存储结构
    mapping = { u'id': {'boost': 1.0,
                          'index': 'not_analyzed',
                          'store': 'yes',
                          'type': u'string',
                          "term_vector" : "with_positions_offsets"},
                  u'user_id': {'boost': 1.0,
                             'index': 'not_analyzed',
                             'store': 'yes',
                             'type': u'string',
                             "term_vector" : "with_positions_offsets"},
                  u'nick': {'boost': 1.0,
                             'index': 'analyzed',
                             'store': 'yes',
                             'type': u'string',
                             "term_vector" : "with_positions_offsets"},
                  u'city': {'boost': 1.0,
                             'index': 'analyzed',
                             'store': 'yes',
                             'type': u'string',
                             "term_vector" : "with_positions_offsets"},
            }

    conn.put_mapping("test-type1", {'properties':mapping}, ["test-index"])#定义test-type
    conn.put_mapping("test-type2", {"_parent" : {"type" : "test-type1"}}, ["test-index"])#从test-type继承

    #插入索引数据
    #{"id":"1", "user_id":"u1", "nick":u"压力很大", "city":u"成都"}: 文档数据
    #test-index:索引名称
    #test-type: 类型
    #1: id 注:id可以不给,系统会自动生成
    conn.index({"id":"1", "user_id":"u1", "nick":u"压力很大", "city":u"成都"}, "test-index", "test-type1", 1)
    conn.index({"id":"2", "user_id":"u2", "nick":u"压力很小", "city":u"北京"}, "test-index", "test-type1")
    conn.index({"id":"3", "user_id":"u3", "nick":u"没有压力", "city":u"成都"}, "test-index", "test-type1")

    conn.default_indices=["test-index"]#设置默认的索引
    conn.refresh()#刷新以获得最新插入的文档

def query():
    #查询nick中包含压力的记录
    q = pyes.StringQuery(u"压力",'nick')
    results = conn.search(q)

    for r in results:
        print u"查询nick中包含压力的记录", r['nick'], r['city']

    #查询city中包含成都的数据
    q = pyes.StringQuery(u"成都",'city')
    results = conn.search(q)

    for r in results:
        print u"查询city中包含成都的数据", r['nick'], r['city']

    #查询nick中包含很小或没有的数据
    q = pyes.StringQuery(u"很小 OR 没有",'nick')
    results = conn.search(q)

    for r in results:
        print u"查询nick中包含很小或没有的数据", r['nick'], r['city']



if __name__ == '__main__':
    #creat()
    query()

运行结果:

查询nick中包含压力的记录 压力很大 成都
查询nick中包含压力的记录 没有压力 成都
查询nick中包含压力的记录 压力很小 北京
查询city中包含成都的数据 压力很大 成都
查询city中包含成都的数据 没有压力 成都
查询nick中包含很小或没有的数据 没有压力 成都
查询nick中包含很小或没有的数据 压力很小 北京
查询nick中包含很小或没有的数据 压力很大 成都

查询套嵌的json:http://www.spacevatican.org/2012/6/3/fun-with-elasticsearch-s-children-and-nested-documents/

参考:

http://www.congci.com/item/elasticsearch-anzhuang-peizhi-ji-zhongwen-fenci

http://pyes.readthedocs.org/en/latest/index.html

http://blog.plotcup.com/a/106

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Linux/Mac#  
分享到:
阅读[8896] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

网友54.*.*.22[火星]2018-08-21 08:27
网友220.*.*.122[北京]2018-08-21 08:22
网友46.*.*.82[火星]2018-08-21 08:17
网友46.*.*.81[火星]2018-08-21 08:14

发表评论