zoukankan      html  css  js  c++  java
  • ElasticSearch : 基础

    #新建索引以及类型:
    PUT http://10.18.43.3:9200/test
    {
        "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 0
        },
        "mappings": {
            "type1": {
                "properties": {
                    "id": {
                        "type": "long"
                        },
                    "ukey": {
                        "type": "keyword"
                    },
                    "startid": {
                        "type": "long"
                    },
                    "title": {
                        "type": "text"
                    },
                    "fetch_time": {
                        "type": "date",
                        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
                    }
                }
            }
        }
    }
    keyword类型的字段是不可切分的,text可以分词
    
    #插入数据: PUT http://10.18.43.3:9200/test/type1/1
    {
        "key": value,
        "key2": value2
    }
    ,如果需要自动生成id,需要把方法改成POST,然后把url改成http://10.18.43.3:9200/test/type1
    
    #更新数据
    POST http://10.18.43.3:9200/test222/type1/1/_update
    {
        "doc": {
            "content":"更新content2"
        }
    
    }
    更新数据需要用POST方法而且后面要加_update,更新的字段要包含在 doc 字段里面
    
    #删除数据
    DELETE http://10.18.43.3:9200/test/type1/1
    
    #删除索引
    DELETE http://10.18.43.3:9200/test
    
    #简单查询
    GET http://10.18.43.3:9200/test/type1/1
    
    #条件查询
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "match_all": {}
        },
        "from": 1,
        "size": 2
    }
    from 是从哪一行开始,size 是查询显示多少条
    
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "match": {
                "html_snapshot": "医生"
            }
        },
        "sort": [
            {
                "id": {
                    "order": "desc"
                }
            }    
        ]
    }
    查询所有html_snapshot包含"医生"的数据,类似于模糊查询(查询html_snapshot包含"医生"的数据),需要注意这个模糊匹配会把查询条件再次分词,如
    条件为"html_snapshot": "医生和护士"的话,那么很可能会分成"医生","护士"两个词来分别匹配,如果需要像SQL那样 %xxx%这种形式的模糊匹配的话,
    那么需要把 "match"改为"match_phrase",这样如果匹配"医生和护士",那么会匹配里面包含 xxx医生和护士xxxx 这种类型的数据
    这儿html_snapshot是text类型,如果是keyword类型的话查询结果是精确查询的结果(查询html_snapshot等于"医生"的数据)
    按照id降序排列
    
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "query_string": {
                "query": "(非常感谢 AND 医院) OR 医生",
                "fields": ["html_snapshot", "content"]
            }
        }
    }
    查询多个字段,这样查询也是会先自动分词然后进行匹配
    
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "term": {
                "startid": 2
            }
        }
    }
    精确查询 startid == 2
    
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "range": {
                "startid": {
                    "gte": 2,
                    "lte": 3
                }
            }
        }
    }
    startid 大于等于2,小于等于3的数据
    
    POST http://10.18.43.3:9200/test/_search
    {
        "query": {
            "bool": {
                "must": [
                    {
                        "match": {
                            "startid": 2
                        }
                    },
                    {
                        "match": {
                            "html_snapshot": "客气"
                        }
                    }
                ]
            }
        }
    }
    查询 startid必须为2(因为是keyword类型) 和 html_snapshot必须包含(text类型)"客气" 的所有数据
    
    #聚合查询
    POST http://10.18.43.3:9200/test/_search
    {
        "aggs": {
            "group_by_startid": {
                "terms": {
                    "field": "startid",
                    "size": 3
                }
            }
        }
    }
    根据startid统计所有数据count,返回统计结果前3的聚合数据,size是显示3条聚合数据
    可以同时统计多组聚合信息
    
    POST http://10.18.43.3:9200/test/_search
    {
        "aggs": {
            "group_by_startid": {
                "stats": {
                    "field": "startid"
                }
            }
        }
    }
    stats是计算聚合关键字,里面有startid的总数,最大值最小值平均值总和等数据

    ##Elasticsearch 使用bool 子句来将各种子查询关联起来,组成布尔表达式,bool 子句可以随意组合、嵌套。

    bool子句主要包括:

    must:表示必须匹配。
    must_not:表示一定不能匹配。
    should:表示可以匹配,类似于布尔运算里的”或”。如果bool 子句里,没有must子句,那么,should子句里至少匹配一个,如果有must子句,那么,should子句至少匹配零个。可以使用minimum_should_match 来对最小匹配数进行设置。

    ====================================ES的快照备份查询与恢复===========================================

    索引的快照过程是增量的。在创建索引快照的过程中,ElasticSearch会分析仓库中已经存在的索引文件,只拷贝那些在最后一次快照之后被创建或者更新的文件。That allows multiple snapshots to be preserved in the repository in a compact form. 快照过程以非阻塞的方式执行,所有的索引和搜索操作都可以对正在被创建快照的索引继续执行。一个快照表示的是这个索引在快照被创建时间点的索引视图,所以在索引过程开始之后被添加到索引中的记录不会出现在快照中。
    (参考 https://blog.csdn.net/ale2012/article/details/82702128#_126)

    需要先在elasticsearch.yml中加入  path.repo: /usr/local/backups 这个配置来配置备份文件夹 文件夹权限要设置为777
    
    1. 创建快照仓库, 名字为all_backup
    http://10.1.1.112:9200/_snapshot/all_backup   PUT
    {
      "type": "fs",
      "settings": {
        "location": "/usr/local/backups/all_backup"
      }
    }
    
    2. 备份快照,快照名字v2019-7-2
    http://10.1.1.112:9200/_snapshot/all_backup/v2019-7-2?wait_for_completion=true    PUT

    如果只需要备份某几个索引可以加上:

    {
    "indices": "article"
    }


    3. 查询快照 http://10.1.1.112:9200/_snapshot/all_backup/* GET 4. 恢复快照 http://10.1.1.112:9200/_snapshot/all_backup/v2019-7-2/_restore POST
  • 相关阅读:
    Thinkphp 中的自动验证 上一篇有例子
    Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
    ThinkPHP框架 祖辈分的理解 【儿子 FenyeController】继承了【父亲 FuController】继承了【祖辈 Controller】的
    ThinkPHP框架 AJAX方法返回 AJAX实现分页例子:
    ThinkPHP框架 【 AJAX方法返回 】 例子:简单添加一条数据 和 查询一个表里的数据
    thinkPHP框架 简单的删除和修改数据的做法 和 模板继承的意思大概做法
    cookie 和 session 的区别
    ThinkPHP框架 表单传值自动验证!!
    UVA 11624 Fire! (bfs)
    POJ 3074 Sudoku (Dacing Links)
  • 原文地址:https://www.cnblogs.com/cccy0/p/9579275.html
Copyright © 2011-2022 走看看