zoukankan      html  css  js  c++  java
  • Elasticseach 基础使用

    相关文档:

    # pip install elasticsearch
    # 文档:https://pypi.org/project/elasticsearch/5.4.0/
    # 解释文档:https://zhuanlan.zhihu.com/p/95163799
    

      

    python操作es基本方法:

    # -*- coding: utf-8 -*-
    """
    @Time : 
    @Auth : wang
    """
    
    from datetime import datetime
    from elasticsearch import Elasticsearch
    
    # 连接ES
    es = Elasticsearch([{'host': '11.12.12.12', 'port': 9200}], timeout=3600)
    
    # 创建索义
    es.indices.create(index='my-index', ignore=400)
    
    # 插入数据,指定id
    res = es.index(index="my-index", doc_type="test-type", id=43, body={"any": "data_43", "timestamp": datetime.now()})
    print(res)
    # {'_index': 'my-index', '_type': 'test-type', '_id': '43', '_version': 1, 'result': 'created',
    #  '_shards': {'total': 2, 'successful': 1, 'failed': 0}, '_seq_no': 0, '_primary_term': 1}
    
    # 不指定id,自动生成
    res = es.index(index="my-index", doc_type="test-type",
                   body={"first_name": "xiao", "last_name": "xiao", 'age': 25, 'about': 'I love to go rock climbing',
                         'interests': ['game', 'play']})
    print(res)  # 生成的id'_id': 'g_34tnMBj125sz4lUz_q'
    
    # 简单的根据id查询数据
    ret = es.get(index="my-index", doc_type="test-type", id=43)
    ret1 = es.get(index="my-index", doc_type="test-type", id='g_34tnMBj125sz4lUz_q')
    print(ret, ret1)
    
    # 删除数据,根据id
    ret = es.delete(index="my-index", doc_type="test-type", id=43)
    print(ret)
    
    # delete_by_query:删除满足条件的所有数据
    query = {
        "query": {
            "match": {
                "first_name": "xiao"
            }
        }
    }
    result = es.delete_by_query(index="my-index", doc_type="test-type", body=query)
    print(result)
    
    # 更新
    doc_body = {
        'script': "ctx._source.remove('age')"
    }
    
    # # 增加字段
    doc_body = {
        'script': "ctx._source.address = '合肥'"
    }
    #
    # 修改部分字段
    doc_body = {
        "doc": {"last_name": "xiao"}
    }
    es.update(index="my-index", doc_type="test-type", id=43, body=doc_body)  # 根据ID更新
    ret = es.get(index="my-index", doc_type="test-type", id=43)
    print(ret)
    
    # update_by_query:更新满足条件的所有数据,写法同上删除和查询
    query = {
        "query": {
            "match": {
                "last_name": "xiao"
            }
        },
        "script": {
            "source": "ctx._source.last_name = params.name;ctx._source.any = params.age",  # 根据参数params字段来
            "lang": "painless",
            "params": {
                "name": "wang",
                "age": 100,
            },
        }
    
    }
    result = es.update_by_query(index="my-index", doc_type="test-type", body=query)
    print(result)
    ret = es.get(index="my-index", doc_type="test-type", id=43)
    print(ret)
    
    # --------------------------------------------------------------------------------
    # 查询所有
    query = {
      "query": {
        "match_all": {}
      }
    }
    result = es.search(index="my-index", body=query)
    print(result)
    
    # 使用DSL语句查询
    query = {
        "query": {
            "term": {  # term 过滤--term主要用于精确匹配哪些
                'any': 100  # 可以多添件匹配[100,39]
            }
        }
    }
    result = es.search(index="my-index", body=query)
    print(result)
    
    
    # range 过滤--按照指定范围查找一批数据 gt : 大于 gte : 大于等于 lt : 小于 lte : 小于等于
    query = {
        "query": {
            "range": {
                'any': {
                    "lt": 34
                }
            }
        }
    }
    result = es.search(index="my-index", body=query)
    print(result)
    
    
    # exists 和 missing 过滤--查找文档中是否包含指定字段或没有某个字段,类似于SQL语句中的IS_NULL条件
    query = {
        "query": {
            "exists": {
                "field": "last_name"
            }
        }
    }
    result = es.search(index="my-index", body=query)
    print(result)
    
    # bool 过滤--合并多个过滤条件查询结果的布尔逻辑 must :: 多个查询条件的完全匹配,相当于 and。must_not :: 多个查询条件的相反匹配,相当于 not。should :: 至少有一个查询条件匹配, 相当于 or。
    query = {
        "query": {
            "bool": {
                "must": {
                    "term": {"last_name": 'wang'},
                    "term": {"any": 100}
                },
            }
        }
    }
    result = es.search(index="my-index", body=query)
    print(result)
    
    # 可以嵌套查询条件
    # query = {
    #     "query": {
    #          "bool": {
    #              "must": {
    #                  "term": { "age": 32 }
    #                 },
    #              "must_not":{
    #                  "exists":   {
    #                     "field":    "name"
    #                 }
    #              }
    #          }
    #     }
    # }
    

      

  • 相关阅读:
    MySQL优化
    MySQL 的 SQL 操作
    笔记本电脑同时使用两个网络
    top
    logrotate
    正则表达式学习总结
    HttpClient parameter 和body 传输同时进行
    Node.js背景
    前后端分离的理解
    shiro 的subject 以及Context 对象的具体的含义。
  • 原文地址:https://www.cnblogs.com/double-W/p/13431475.html
Copyright © 2011-2022 走看看