zoukankan      html  css  js  c++  java
  • Elasticsearch2 短链,接口幂等性,倒排索引,浏览器同源策略,索引操作,文档基本增删查改

    短链

    # 1 python代码如何在vscode中执行?没有vscode 就不会执行python代码了?
        -terminal窗口中操作
    # 2 pip install  卡在那动不了了,问我怎么办?用豆瓣源
        -pip 版本太低了,更新了一下可以了
    # 3 在vscode中如何安装虚拟环境?
        -
      
    虚拟环境,es 集群,节点,分片,副本,全文检索
    gil,io模型,bio,nio,aio io多路复用写到简历上了么?
    
    -如何写一个短链系统(用djagno写一个短链,给公司其他部门推广用)
        -https://www.cnblogs.com/huangxincheng/p/12839160.html
      -长链转短链
        -短链接:http://suo.im/6sM2AG
        -长链接:https://detail.tmall.com/item.htm?id=520828941985&ut_sk=1.XD7VvRDqBU0DAH4ORk9nhaJe_21380790_1588813899709.Copy.1&sourceType=item&price=44&origin_price=51.2&suid=55C94CA2-EDF3-4218-B48B-DA1E5E2440FA&un=2fdfcc84f08e8c0b2040bd82ddc2e1ea&share_crt_v=1&spm=a2159r.13376460.0.0&sp_tk=JEMyb3gxTUZlUjI4JA==&cpp=1&shareurl=true&short_name=h.VQmKBs1&sm=34797a&app=chrome
     
    -http://suo.im/6sM2AG             # 购买冷门域名,做短链
            
        
        长地址:短地址(自己生成的)https://m.tb.cn/6sM2AG
        mysql:key:value             # 数据库记录短链匹配真实地址
        你访问:https://m.tb.cn/6sM2AG 其实是访问https://m.tb.cn,根据后面的
      6sM2AG取数据库查询,重定向到这个地址

    1 接口幂等性

    # 0 接口幂等性:数学概念,多次请求,相当于一次请求
        -get,put,delete都是幂等性的接口
      -post 存在幂等性的问题  # 因为订单号不同,出现多个订单情况
    # 1 前端速度很快,点了两次,会生成两个订单
    
    # 用户在访问新增页面时(提交订单)---》接口返回一个唯一id,提交订单,携带唯一id过来,后端判断这个唯一id是否被用过---》没用过(id先存入redis),创建订单       此id可以是token
    
    -你在项目中碰到的问题和如何解决(项目收获)
    下订单,经常重复订单,点得快,幂等性问题,如何解决的

    2 倒排索引

    # 1 es介绍10个点
    # 2 安装
        -jdk :java开发环境
      -官网下载es相应的版本,解压,到bin目录下启动elasticsearch.bat
      -两个客户端(kibana:官方,发送请求,数据统计,展示,elasticsearch-head:第三方用node写的)
      -kibana跟es版本对应,bin路径下,直接启动
      -elasticsearch-head需要安装node环境,npm install ---》npm run start
      -kibana配置文件配置(copy一下,kibana监听的地址端口,随便名一个名,连接es的地址)
      -修改es配置:允许跨域(浏览器的同源策略,指的是kibana配置),cors:跨域资源共享,实现跨域
    '''
    浏览器同源策略:因为浏览器同源策略,导致了,不能加载不同域的数据,这就是跨域。所以要处理,有两种方案,客户端处理,通过jsonp,服务端处理,允许跨域,也就是所谓的使用cors,跨域资源共享来实现。
    es配置的,就是通过服务端设置,允许。跟学的django写在中间件里是一样的。 所以浏览器同源策略本质上是,别人给不给浏览器同源访问
    ''' # es的倒排索引(扩展阅读.md) -把文章进行分词,对每个词建立索引

    3 索引操作

    # 索引操作---》数据库操作---》新增,删除,修改,查询
    # 1 新增索引:     例:Kibana下输入PUT lqz2      Elasticsearch-head刷新即可看到新增索引
    PUT lqz2     # lqz2就是索引名字
    {      # 参数可带可不带,符合restful规范,得带json格式
      "settings": {
        "index":{
          "number_of_shards":5,    
          "number_of_replicas":1   
        }
      }
    }
    '''
    number_of_shards
    每个索引的主分片数,默认值是5,这个配置在索引创建后不能修改
    number_of_replicas
    每个主分片的副本数默认值是1,对于活动的索引库,这个配置可以随时修改
    '''
    # 2 查询索引
    GET lqz2/_settings      # 拿它的配置
    返回结果
    {
      "lqz2" : {
        "settings" : {
          "index" : {
            "creation_date" : "1588822389842",
            "number_of_shards" : "1",           # 默认为1,因为当前只有一个节点
            "number_of_replicas" : "1",
            "uuid" : "NBXIeVdHQ26vCuPn8_6uew",
            "version" : {
              "created" : "7050099"
            },
            "provided_name" : "lqz2"     # 索引名字
          }
        }
      }
    }
    
    # 3 更新索引       下方把副本分片设为2
    PUT lqz2/_settings    
    {
      "number_of_replicas": 2
    }
    
    
    #4 删除lqz2索引
    DELETE lqz2

    4 文档基本增删查改

    一行一行的数据

    查看索引中的数据

    #1  新增文档   POST,PUT都可以
    # 向lqz2这个索引中的_doc表中插入id为1的一条数据
    # es7.0以后,一个索引下只能有一个类型(一般用_doc)
    POST lqz2/_doc/1
    {
      "title":"红楼梦",
      "price":12,
      "publish_addr":{
        "province":"黑龙江",
        "city":"鹤岗"
      },
      "publish_date":"2013-11-11",
      "read_num":199,
      "tag":["古典","名著"]
    }
    # 上面数据id有1了,此处就不能写1了
    POST lqz2/_doc/2
    {
      "title":"西游记",
      "price":22,
      "publish_addr":{
        "province":"上海",
        "city":"上海"
      },
      "publish_date":"2013-11-11",
      "read_num":66,
      "tag":["古典","小说"]
    }
    
    # 2 查询文档(更详细的查找,后面讲)    
    GET lqz2/_doc/2        # 要的东西在"_source"对应字典中
    
    # 3 修改文档
    -覆盖式(原来的字段就没有了)
    PUT lqz2/_doc/1          # 没有该表直接创建
    {
      "title":"xxxx",
      "price":333,
      "publish_addr":{
        "province":"黑龙江",
        "city":"福州"
      }
    }
    -增量式(只修改某个字段)一定要注意包在doc中
    POST lqz2/_doc/1/_update    # (此写法兼容性好)会提示推荐写法
    {
      "doc":{
        "title":"xx"
      }
    }
    
    # 4 删除文档
    DELETE lqz2/_doc/1
    
    # 5 批量获取(了解)
    GET _mget
    {
      "docs":[
        {
          "_index":"lqz2",
          "_type":"_doc",
          "_id":2
        },
        {
          "_index":"lqz2",
          "_type":"_doc",
          "_id":1
        }
        ]
    }
    
    # 6 批量插入(了解)
    PUT test/_doc/2/_create    # 先创建表插入数据
    {
      "field1" : "value22"
    }
    POST _bulk                # 批量操作
    { "index" : { "_index" : "test", "_id" : "1" } }   # 创建索引为test,id为1数据的数据
    { "field1" : "value1" }
    { "delete" : { "_index" : "test", "_id" : "2" } }  # 删除
    { "create" : { "_index" : "test", "_id" : "3" } }  # 创建
    { "field1" : "value3" }
    { "update" : {"_id" : "1", "_index" : "test"} }    # 修改
    { "doc" : {"field2" : "value2"} }

    5 文档查询

    # 测试数据
    PUT lqz/doc/1
    {
      "name":"顾老二",
      "age":30,
      "from": "gu",
      "desc": "皮肤黑、武器长、性格直",
      "tags": ["", "", ""]
    }
    
    PUT lqz/doc/2
    {
      "name":"大娘子",
      "age":18,
      "from":"sheng",
      "desc":"肤白貌美,娇憨可爱",
      "tags":["", "",""]
    }
    
    PUT lqz/doc/3
    {
      "name":"龙套偏房",
      "age":22,
      "from":"gu",
      "desc":"mmp,没怎么看,不知道怎么形容",
      "tags":["造数据", "",""]
    }
    
    
    # 两种方式
        -第一种(字符串查询)
          GET lqz/doc/_search?q=from:gu
        GET lqz/doc/_search?q=age:22
      -查询的第二种方式(结构化)
          GET lqz/doc/_search
        {
          "query": {
            "match": {
              "from": "gu"
            }
          }
        }
        
        GET lqz/doc/_search
        {
          "query": {
            "match": {
              "age": 22
            }
          }
        }
        
       GET lqz/doc/_search
        {
          "query": {
            "match": {
              "desc": "形容"
            }
          }
        }
    GET lqz/doc/_search
    {
      "query": {
        "match": {
          "tags": "造数据"
        }
      }
    }
    
    
    ###重点,以后你做项目
    mysql,redis,es都有
    mysql中:文章表   ,用户表,标签表
    文章表
    id  name content  user_id
    redis中放缓存
    es:只查文章,用户需要查吗?有全文检索需求的东西,放到es中
    es的表结构,不一定跟mysql的表结构一致
    id  name content  user_name tag
  • 相关阅读:
    cookie实例---显示上一次访问的时间与java.lang.IllegalArgumentException: An invalid character [32] was present in the Cookie value
    No Mapping For GET "xxx.do"
    Mybatis 配置文件
    spring整合JUnit测试
    Spring 约束文件配置
    c3p0封装
    Linux下载:wget、yum与apt-get用法及区别
    docker安装各种坑
    动态管理upsteam---nginx_http_dyups_module
    安装nginx环境(含lua)时遇到报错ngx_http_lua_common.h:20:20: error: luajit.h: No such file or directory的解决
  • 原文地址:https://www.cnblogs.com/ludingchao/p/12845833.html
Copyright © 2011-2022 走看看