-
倒排索引
[TOC]倒排索引是什么?【定义】倒排索引(Inverted Index)是一种用于信息检索的数据结构,尤其适用于文本搜索。它与传统索引的主要区别在于,传统索引是根据文档来查找词语的位置,而倒排索引则是根据词语来查找文档。倒排索引在搜索引擎、数据库系统以及自然语言处理等领域有着广泛的应用。倒排索引的结构包含: 词项索引(term index):存放在 .tip 文件中。存放 FST 的公共前缀和公共后缀。 词项字典:存储的关键词,使用 FST(Finite State Transduc...…
-
广告检索
广告检索倒排索引是搜索引擎的关键技术,而广告的检索上也采用这样的框架。但是广告的检索问题也有一些自身的特点和需求,基本的倒排索引技术在广告检索中遇到了两个新问题。 广告的定向条件组 ,可以看成是一个由与或关系连接的布尔表达式,这样的文档显然与搜索引擎面对的 Bow 文档不太一样,这里存在着有针对性的检索性能优化空间。 在上下文关键词或用户标签比较丰富,广告检索中查询可能相当长,甚至会由上百个关键词组成,这种情况下的检索也与搜索引擎中主要由 1 ~ 4 个关键词组成的查询有很大区别。试想...…
-
搜索引擎架构
搜索引擎架构整个搜索引擎分为三个系统 爬虫系统 索引系统 线上搜素服务爬虫系统爬虫分为两个阶段: 第一阶段:根据目标网站的列表页,爬对应的文档 URL 第二阶段:根据文档 URL,下载文档内容触发器: 定时任务触发 消息触发 管理后台手动触发某一个爬虫任务文件服务器: 存储图片和视频文件爬虫框架:Scrapy(成熟稳定,支持分布式爬虫)索引系统索引系统主要数据依赖:内容库和文件服务依赖服务: 分词服务 NLP 服务 同义词扩展 ...…
-
决策树
相亲示例:现想象一个女孩的母亲要给这个女孩介绍男朋友,于是有了下面的对话: 女儿:多大年纪了? 母亲:26。 女儿:长的帅不帅? 母亲:挺帅的。 女儿:收入高不? 母亲:不算很高,中等情况。 女儿:是公务员不? 母亲:是,在税务局上班呢。 女儿:那好,我去见见。这个女孩的决策过程就是典型的分类树决策。相当于通过年龄、长相、收入和是否公务员对将男人分为两个类别:见和不见(二分类)。决策树决策树(decision tree)决策树特点 决策树是一个 if - else 规则...…
-
模型集成
模型集成三个臭皮匠顶一个诸葛亮。将多个模型融合在一起,得到一个单一模型。应用:分类,回归,聚类,推荐…为什么要集成?结论:将多个模型融合会得到更好的精确度。假设有 5 个 Accuracy = 70% 的分类器,相互独立。 采用投票的方式将 5 个分类器的结果进行集成:当一个样本被三个及以上的分类器判断为正例,那么集成模型就判断为正例。集成模型的精度为:$C_5^20.7^30.3^2+C_5^40.7^40.3^1+C_5^5*0.7^5=83.7\%$如果是 101 个分类器(必须保证...…
-
Sentinel
概述Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。官网:https://github.com/alibaba/sentinelhttps://sentinelguard.io/zh-cn/docs/introduction.htmlSentinel 主要特征:快速开始下载安装下载地址:Release v1.8.6 · alibaba/...…
-
Seata
分布式事务分布式事务是指存在多个跨库事务的事务一致性问题。或者在分布式架构里面有多个应用节点组成的多个事务之间的事务一致性的问题。目前主流的分布式事务解决方案有两种 基于 XA 协议的强一致性事务方案(两阶段提交)。 比如说:Atomikos、Seata 里面的 XA 事务模型 基于 CP 理论我们知道,如果要保证分布式事务的强一致性,就必然会带来性能上的影响,从而影响到可用性。所以强一致性的性能会比较低。 基于 Base 理论下的最终一致性解决...…
-
OpenFeign
概述Feign 封装了Http 调用流程,更适合面向接口化的变成习惯。 Feign 宗旨:使编写 Java Http 客户端变得更容易。 通过 Feign 只需要定义服务绑定接口且以声明式的方法 ,优雅而简单的显示了服务调用。 Feign 集成了 Ribbon,通过轮训实现了客户端的负载均衡。Feign 是如何设计?快速上手项目架构如下图: Client:从 Nacos Server 中获取需要调用的微服务的信息(IP 和 Port) Server:会将自己的信...…
-
Nacos
概述Nacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台(注册中心+ 配置中心 + 总线)。Nacos 是 Naming 、Configuration、Service 这三个单词拼凑而来。官网:https://github.com/alibaba/Nacoshttps://nacos.io/zh-cn/安装下载下载地址: https://github.com/alibaba/nacos/releases/tag/2.2.1注意:2.2.1 以后需要 将 Nacos...…
-
微服务
服务架构演进服务架构演进过程:抽取各个模块独立维护,独立部署的过程。初创公司2 ~ 3个研发人员,ALL IN ONE 的框架开发效率最高。随着队伍的壮大,产品,用户,商品成立独立小组,拆出相应的模块,独立维护,相互不影响,根据不同流量,分配不同的服务器。然而也带来了问题:业务之间的相互调用问题。于是不同部门将一些公共服务,抽取出来,做成rpc 服务,供其他兄弟部门调用。ALL IN ONE关键点:数据访问层(ORM)是关键。优点: 简单。 减少部署节点和成本。缺点: 扩展不容易。 ...…
-
丢失区间
给定一个已排序的整数数组,其中元素的取值范围为 【lower,upper】(包括边界),返回其缺少的范围。样例1输入:nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99输出:["2", "4->49", "51->74", "76->99"]解释:在区间[0,99]中,缺失的区间有:[2,2],[4,49],[51,74]和[76,99]样例2输入:nums = [0, 1, 2, 3, 7], lower = 0 a...…
-
Spring Security Web 权限入门
概述SpringSecurity 两个核心功能: 用户认证(Authentication) :系统确认用户是否登录。 用户授权(Authorization) :系统判断用户是否有权限去做某些事。 SpringSecurity 本质是一个过滤链。 FilterSecurityInterceptor:是一个方法级的权限过滤器,位于过滤链的最底部。 ExceptionTranslationFilter:是一个异常过滤器,用来处理在认证授权过程...…
-
【每日一题】二叉树中所有距离为 K 的结点
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。 返回到目标结点 target 距离小于等于 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。class Solution: def __init__(self, data): self.data = data self.result = set() def distance_k(self, target, k): if not s...…
-
ES Suggester
Elasticsearch里设计了4 种类别的 Suggester Term Suggester:词条建议器。对给输入的文本进进行分词,为每个分词提供词项建议。 Phrase Suggester:短语建议器,在term的基础上,会考量多个term之间的关系 Completion Suggester:它主要针对的应用场景就是”Auto Completion” Context Suggester:上下文建议器Term Suggester每个 token 挑选 options 里的词,组...…
-
ES 入门
ES 概述ES 是一个开源的高扩展的分布式全文搜索引擎。倒排索引环境准备Elasticsearchn 官方地址:https://www.elastic.co/cn/下载地址:注意:9300 端口为 Elasticsearch 集群间组件的通信端口,9200 端口为浏览器访问的 http在浏览器中访问:http://localhost:9200ES VS Mysql与 MySQL 中概念对比Types 的概念已经被逐渐弱化,Elasticsearch 6.X 中,一个 index 下已经只能...…
-
ES 索引备份
快照仓库注册快照存储库POST _snapshot/my_backup { "type": "fs", "settings": { "location": "/mount/backups/my_backup", "max_snapshot_bytes_per_sec" : "50mb", "max_restore_bytes_per_sec" : "50mb" }}POST _snapshot/search_user_v6...…
-
ES 索引数据预处理
pipeline在文档写入 ES 之前,对数据进行预处理(ingest)工作通过定义 pipeline 和 processors 实现。注意:数据预处理必须在 Ingest node 节点处理,ES 默认所有节点都是 Ingest node。如果需要禁用 Ingest ,可以在 elasticsearch.yaml 配置:node.ingest: falsepipeline Demo创建 pipeline# 创建名称为:pipeline_uppercase pipeline# proces...…
-
虚拟机栈
概述Java 的指令都是根据**栈**来设计的。基于栈的 JVM 优点 跨平台 指令集小 编译器容易实现缺点 实现同样的功能需要更多的指令(性能差)**栈是运行时的单位,而堆是存储的单位。**Java 虚拟机栈(Java Virtual Machine Stack)的特点 每个线程再创建时都会创建一个虚拟机栈,以栈帧(Stack Frame)为数据单元,每个栈帧一一对应一个调用方法。栈帧是线程私有的,不同线程所包含的栈帧是不允许存在相互引用的。 Java 栈的生命周期和线程一致...…
-
方法区
栈、堆、方法区的交互关系从线程共享与否的角度来看线程共享要注意:线程安全问题。方法区的理解《Java 虚拟机规范》中明确说明 尽管所有的方法区在逻辑上属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或者进行压缩。HotSpot JVM 的方法区还有一个别名叫做 Non-Heap(非堆),目的就是要和堆分开。所以:**方法区看作是一块独立于 Java 堆的内存空间。**方法区和 Java 堆内数据变化频率差异非常大,方法区内的数据是稳定的,所以后续表现出的特性不一样(垃圾回收频率...…
-
分布式 ID
背景在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。随着数据日渐增长,对数据分库分表后也需要有一个唯一ID来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;此时一个能够生成全局唯一 ID 的系统是非常必要的。分布式 ID 需要满足以下条件 全局唯一:不能出现重复的 ID 号,既然是唯一标识,这是最基本的要求。 高性能:高可用低延时,ID 生成速度要快,否则反倒会成为业务瓶颈; 高可用:尽量保证服务的可用性,多实例化,避免因一个实例挂掉影响整个业务应用的运行。 ...…