• ElasticSearch 入门(转)


    最大的特点: 
    1. 数据库的 database, 就是  index 
    2. 数据库的 table,  就是 tag 
    3. 不要使用browser, 使用curl来进行客户端操作.  否则会出现 java heap ooxx... 

    curl:  -X 后面跟 RESTful :  GET, POST ... 
    -d 后面跟数据。 (d = data to send) 

    1. create:  

    指定 ID 来建立新记录。 (貌似PUT, POST都可以) 
    $ curl -XPOST localhost:9200/films/md/2 -d ' 
    { "name":"hei yi ren", "tag": "good"}' 

    使用自动生成的 ID 建立新纪录: 
    $ curl -XPOST localhost:9200/films/md -d ' 
    { "name":"ma da jia si jia3", "tag": "good"}' 

    2. 查询: 
    2.1 查询所有的 index, type: 
    $ curl localhost:9200/_search?pretty=true 

    2.2 查询某个index下所有的type: 
    $ curl localhost:9200/films/_search 

    2.3 查询某个index 下, 某个 type下所有的记录: 
    $ curl localhost:9200/films/md/_search?pretty=true 

    2.4 带有参数的查询:  
    $ curl localhost:9200/films/md/_search?q=tag:good 
    {"took":7,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":2,"max_score":1.0,"hits":[{"_index":"film","_type":"md","_id":"2","_score":1.0, "_source" : 
    { "name":"hei yi ren", "tag": "good"}},{"_index":"film","_type":"md","_id":"1","_score":0.30685282, "_source" : 
    { "name":"ma da jia si jia", "tag": "good"}}]}} 

    2.5 使用JSON参数的查询: (注意 query 和 term 关键字) 
    $ curl localhost:9200/film/_search -d ' 
    {"query" : { "term": { "tag":"bad"}}}' 

    3. update  
    $ curl -XPUT localhost:9200/films/md/1 -d { ...(data)... } 

    4. 删除。 删除所有的: 

    $ curl -XDELETE localhost:9200/films

    ---------------------------------------------------------------------------------------------------------

    角色关系对照

    elasticsearch 跟 MySQL 中定义资料格式的角色关系对照表如下

    MySQL             elasticsearch
    database                 index
    table                         type

    table schema mapping
    row                          document
    field                         field

    3.索引映射

    #创建索引
    $ curl -XPUT http://localhost:9200/test-index

    #创建Mapping
    $ curl -XPUT http://localhost:9200/test-index/test-type/_mapping -d '{
        "properties" : {
            "name" : { "type" : "string" }
        }
    }'
    @route('/indexsetting/')
    def indexmapping():
        """索引映射"""
        conn = ES('127.0.0.1:9200')
        conn.debug_dump True
        try:
            #删除索引
            conn.delete_index("test-index")
        except:
            pass
        #创建索引
        conn.create_index("test-index")
        mapping {
               u'id': {'store': 'yes',
                        'type': u'integer'},
               u'author': {'boost': 1.0,
                           'index': 'not_analyzed',
                           'store': 'yes',
                           'type': u'string'},
               u'published': {'boost': 1.0,
                              'index': 'not_analyzed',
                              'store': 'yes',
                              'type': u'datetime'},
               u'url': {'store': 'yes',
                        'type': u'string'},
               u'title': {'boost': 1.0,
                           'index': 'analyzed',
                           'store': 'yes',
                           'type': u'string'},
               u'content': {'boost': 1.0,
                           'index': 'analyzed',
                           'store': 'yes',
                           'type': u'string',
                           "term_vector" : "with_positions_offsets"}
               }
        #索引映射
        conn.put_mapping("test-type"{'properties':mapping}["test-index"])
        return "索引映射"

    4.索引

    #索引
    $ curl -XPUT http://localhost:9200/test-index/test-type/-d '{
        "user": "kimchy",
        "post_date": "2009-11-15T13:12:00",
        "message": "Trying out elasticsearch, so far so good?"
    }'

    #获取
    $ curl -XGET http://localhost:9200/test-index/test-type/1

    #删除
    $ curl -XDELETE 'http://localhost:9200/test-index/test-type/1'
    @route('/indextest/')
    def indexTest():
        """索引测试"""
        conn = ES('127.0.0.1:9200')
        for item in Data().getData():
            #添加索引
            conn.index(item,"test-index""test-type",item['id'])

        #索引优化
        conn.optimize(["test-index"])
        #删除索引内容
        conn.delete("test-index""test-type"2668090)
        #更新索引内容
        model = conn.get("test-index""test-type"2667371)
        model["title"]="标题修改测试"
        conn.update(model,"test-index""test-type",2667371)

        #刷新索引
        conn.refresh(["test-index"])

        q = MatchAllQuery()
        results = conn.search(query = q,indices="test-index",doc_types="test-type")
    #    for r in results:
    #        print r
        return template('default.tpl'list=results,count=len(results))

    5.搜索

    #lucene语法方式的查询
    $ curl -XGET http://localhost:9200/test-index/test-type/_search?q=user:kimchy

    #query DSL方式查询
    $ curl -XGET http://localhost:9200/test-index/test-type/_search -d '{
        "query" : {
            "term" : { "user": "kimchy" }
        }
    }'

    #query DSL方式查询
    $ curl -XGET http://localhost:9200/test-index/_search?pretty=true -d '{
        "query" : {
            "range" : {
                "post_date" : {
                    "from" : "2009-11-15T13:00:00",
                    "to" : "2009-11-15T14:30:00"
                }
            }
        }
    }'

    #查找全部索引内容
    $ curl -XGET http://localhost:9200/test-index/test-type/_search?pretty=true
    @route('/search/')
    @route('/search/<searchkey>')
    def search(searchkey=u"关键算法"):
        """索引搜索"""
        conn = ES('127.0.0.1:9200')

        #TextQuery会对searchkey进行分词
        qtitle = TextQuery("title", searchkey)
        qcontent = TextQuery("content", searchkey)
        #发布时间大于"2012-9-2 22:00:00"
        qpublished=RangeQuery(ESRangeOp("published""gt"datetime(20129,22200)))

        h = HighLighter(['<b>']['</b>'], fragment_size=500)
        #多字段搜索(must=>and,should=>or),高亮,结果截取(分页),排序
        q = Search(BoolQuery(must=[qpublished],should=[qtitle,qcontent]),highlight=h, start=0, size=3, sort={'id': {'order': 'asc'}})
        q.add_highlight("title")
        q.add_highlight("content")
        results = conn.search(query = q,indices="test-index",doc_types="test-type")

        list=[]
        for r in results:
            if(r._meta.highlight.has_key("title")):
                r['title']=r._meta.highlight[u"title"][0]
            if(r._meta.highlight.has_key("content")):
                r['content']=r._meta.highlight[u"content"][0]
            list.append(r)
        return template('search.tpl'list=list,count=results.total)

    6.设置

    #创建索引,并设置分片和副本参数
    $ curl -XPUT http://localhost:9200/elasticsearch-d '{
        "settings" : {
            "number_of_shards" : 2,
            "number_of_replicas" : 3
        }
    }'

    7.其他

    #分词
    curl -XGET 'http://localhost:9200/test-index/_analyze?text=中华人民共和国'
  • 相关阅读:
    css3实现渐变进度条
    从实际项目出发,浅淡什么是设计空间
    消失的Controller
    深入理解Go系列一之指针变量
    48个国际音标简述
    【PyTorch】按照 steps 训练和保存模型
    用C/python手写redis客户端,兼容redis集群 (-MOVED和-ASK),快速搭建redis集群
    jsoncpp安装与使用 cmake安装 升级g++ gcc支持c++11
    【Android】解决Android Studio初次配置可能会出现的Unkown Host问题
    【数据结构】时间复杂度和空间复杂度计算
  • 原文地址:https://www.cnblogs.com/limei/p/3899913.html
Copyright © 2020-2023  润新知