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取数据库查询,重定向到这个地址
# 0 接口幂等性:数学概念,多次请求,相当于一次请求 -get,put,delete都是幂等性的接口 -post 存在幂等性的问题 # 因为订单号不同,出现多个订单情况 # 1 前端速度很快,点了两次,会生成两个订单 # 用户在访问新增页面时(提交订单)---》接口返回一个唯一id,提交订单,携带唯一id过来,后端判断这个唯一id是否被用过---》没用过(id先存入redis),创建订单 此id可以是token -你在项目中碰到的问题和如何解决(项目收获) 下订单,经常重复订单,点得快,幂等性问题,如何解决的
# 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) -把文章进行分词,对每个词建立索引
# 索引操作---》数据库操作---》新增,删除,修改,查询 # 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
#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"} }
# 测试数据 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