还是搜索、索引的问题

2023-10-27

搜索要弄清2个基本问题:

1)要搜索出什么类型的entity?

2)entity的哪个方面/维度和关键词发生关联的?一般来说可以有多个角度link到entity,一个entity支持多个索引,可以从不同的column检索


对于 web search,这两个问题都很简单,1)只有一种entity,就是网页,2)关键词和网页也只有一种关联关系,就是包含关系


对于linkedin或者facebook的typeahead搜索,返回的就是多种entity,有people,event,company,把关键词同时发送给不同entity对应的leaf search service,然后aggregate结果。这里也没有指定dimension,也就是就支持一种关联,没有dimension,其实是一种or的关系,entity的任意一个字段和关键词有关联,entity就和这个关键词有关联。实现起来就是类似一般doc建倒排的过程,过一遍entity(的每个字段),遇到一个word,就给这个work和entity之间建立一个link,等于是把各个字段和合并了当成entity的flat content。之前德国juddi的那个项目做个类似的事情:把数据库表记录的字段合并,送到lucene做full text index。


但是更一般,的比如MDS,是应该支持entity的多维度搜索的,以追求更精确、结果更少的搜索,比如,我就想搜title里包含关键词的,description包含的不算。

对于支持多entity type,每种entity又支持多种dimension的search 系统,索引怎么组织?

对于数据库,索引是应该是per table per column的,也就是一个table的一个column对应一个索引,独立的一棵树。

对于search 系统,有多种选择:

1)现有系统一般是先per entity type的,因为要按entity type做 垂直partition,每个entity type对应一个leaf search service,可以在这个架构上继续支持多维度,两个选择:

a)每个维度一颗索引树,到对应维度的索引去搜

b)所有维度共享一棵搜索树,只是value部分是多条拉链:{ key : { dimension1 : [1, 3, 4], dimension2 : [2, 4, 6] } }

个人倾向于第二种方式,空间利用率更高一些

2)如果不是必须按entity type进行垂直partition,不同entity type的索引也可以共享:

{key, {entityType1 : {dimension1 : [1, 2],  dimension2:[3, 4]}, entityType2: {dimension1: [8, 9],  dimension2: [5, 6]} }


key,entityType,dimension 是搜索的三级,顺序可以任意组合,当然,entityType和 dimension的数量可以看作是常数,主要还是key的搜索。MDS的顺序是 dimension -> key -> entityType。

即便不支持显式的mult-dimension search,也就是entity和key之间只有一种关联,实现层面也可以用 key->entityType -> dimension 或者 entityType->key->dimension这种方式,只需返回entityType下所有的dimension拉链就行了,这样两种模式同时支持了。




本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

还是搜索、索引的问题 的相关文章

  • 关于springmvc的面试经验分享

    1 什么是 Spring MVC Spring MVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架 通过把 Model View Controller 分离 将 web 层进行职责解耦 把复杂的 w
  • 【架构设计】阿里开源架构Cola4.0的项目实践:订单系统

    项目介绍 使用SpringBoot MybaitsPlus Cola 整洁面向对象分层架构 4 0重构订单功能 项目地址 Gitee https gitee com charles ruan smile cola Github https
  • 人工智能大模型加速数据库存储模型发展 行列混合存储下的破局

    数据存储模型 专栏内容 postgresql内核源码分析 手写数据库toadb 并发编程 toadb开源库 个人主页 我的主页 座右铭 天行健 君子以自强不息 地势坤 君子以厚德载物 概述 在数据库的发展过程中 关系型数据库是一个里程碑式的
  • AS配置NDK开发环境,附CMake、NDK-build构建工具用法

    注意 Android Studio需要是1 3及以上版本 且版本号小于2 2 见文末说明 步骤1 新建一个项目 打开Project Structure 设置Android NDK Location目录 如果没有提前下载NDK包 可打开SDK
  • HarmonyOS-开发避坑指南——源码下载和编译,企业级项目实战讲解

    安装文件系统打包工具 运行 mkfs vfat 如果未找到该命令 需要安装 运行 mcopy 如果未找到该命令 需要安装 sudo apt get install dosfstools mtools 官方文档说明的两个文件系统打包工具sud
  • 十四、java版 SpringCloud分布式微服务云架构之Java String 类

    Java String 类 字符串广泛应用 在 Java 编程中 在 Java 中字符串属于对象 Java 提供了 String 类来创建和操作字符串 创建字符串 创建字符串最简单的方式如下 String str xxx 在代码中遇到字符串
  • 【实践篇】领域驱动设计:DDD工程参考架构

    背景 为什么要制定参考工程架构 不同团队落地DDD所采取的应用架构风格可能不同 并没有统一的 标准的DDD工程架构 有些团队可能遵循经典的DDD四层架构 或改进的DDD四层架构 有些团队可能综合考虑分层架构 整洁架构 六边形架构等多种架构风
  • RabbitMQ集群架构模式

    搭建Mirror镜像集群 4369是erlang的发现端口 5672是rabbitmq的通信端口 15672是rabbitmq的可视化控制台的端口号 25672是erlang底层发送消息和分配消息的底层端口 firewall cmd zon
  • 深入微服务架构 | 微服务与k8s架构解读

    微服务项目架构解读 什么是微服务 微服务是指开发一个单个小型的但有业务功能的服务 每个服务都有自己的处理和轻量通讯机制 可以部署在单个或多个服务器上 微服务也指一种种松耦合的 有一定的有界上下文的面向服务架构 也就是说 如果每个服务都要同时
  • 【CPU 架构】x86、x86_64、x64、arm64、aarch64

    x86 x86 64 x64 arm64 aarch64 1 服务器分类 2 CPU 架构 2 1 x86 架构 x86 x86 64 x64 2 2 arm 架构 arm64 和 aarch64 3 发展历史 1 服务器分类 按照 CPU
  • 计算机网络中的通信子网:架构、协议与技术简介

    在计算机网络中 通信子网是负责实现主机之间以及主机与终端之间数据传输的核心部分 它由一系列硬件设备和通信协议组成 为上层应用提供可靠 高效和透明的数据传输服务 本文将详细介绍通信子网的架构 协议与技术 一 通信子网的架构 星型拓扑 星型拓扑
  • 每天花2小时复习Java面试指南,高级架构视频,我进了阿里定级P7

    Java进阶架构师必备 基础 容器 并发 JVM Java8 计算机网络 计算机操作系统 Linux 数据结构 算法 mysql 优化思路 系统设计 分布式 线上问题调优 虚拟机 tomcat 面试指南 工具 添加图片注释 不超过 140
  • 第六章--- 实现微服务:匹配系统(下)

    0 写在前面 这一章终于完了 但是收尾工作真的好难呀QAQ 可能是我初学的缘故 有些JAVA方面的特性不是很清楚 只能依葫芦画瓢地模仿着用 特别是JAVA的注解 感觉好多但又不是很懂其中的原理 只知道要在某个时候用某个注解 我真是有够菜的
  • Autosar诊断——配置部分服务功能寻址不响应,抑制肯定响应

    Autosar诊断 简介和功能概述 Autosar诊断 DCM模块内的子模块 Autosar诊断 DSL Diagnostic Session Layer Autosar诊断 DSD Diagnostic Service Dispatche
  • 浅谈小程序开源业务架构建设之路

    一 业务介绍 1 1 小程序开源整体介绍 百度从做智能小程序的第一天开始就打造真正开源开放的生态 我们的愿景是 定义移动时代最佳体验 建设智能小程序行业标准 打破孤岛 共建开源 开放 繁荣的小程序行业生态 百度智能小程序的生态玩家有三类 分
  • 专车数据层架构进化往事:好的架构是进化来的,不是设计来的

    很多年前 读了 子柳 老师的 淘宝技术这十年 这本书成为了我的架构启蒙书 书中的一句话像种子一样深埋在我的脑海里 好的架构是进化来的 不是设计来的 2015 年 我加入神州专车订单研发团队 亲历了专车数据层 架构进化 的过程 这次工作经历对
  • 适用于任何公司的网络安全架构

    1 第一等级 基础级 优势 可防范基本有针对性的攻击 使攻击者难以在网络上推进 将生产环境与企业环境进行基本隔离 劣势 默认的企业网络应被视为潜在受损 普通员工的工作站以及管理员的工作站可能受到潜在威胁 因为它们在生产网络中具有基本和管理员
  • 【技术科普】什么是达芬奇架构?有什么优势?

    芯片架构是指芯片设计的基本结构和组织方式 用于实现各种计算 存储和通信功能 芯片架构通常包括处理器核心 内存 输入输出接口等组成部分 这些部分的设计对芯片性能和功耗有着直接的影响 世界上主流的芯片架构主要包括x86 ARM PowerPC和
  • CCSC,一种CPU架构

    core circuit separate computer 核与执行电路的分离 最初是为了省电 用寄存器实现这种分离 V寄存器控制着执行电路的供电 V 0则不供电 进入省电模式 V 1则供电 进入工作模式 P寄存器是parameter r
  • [机缘参悟-131] :《洞见》:为什么佛学是真的 -2-从进化心理学了解佛家的三毒“贪嗔痴”的进化机制

    目录 一 佛家的三毒 贪嗔痴 二 进化心理学对贪嗔痴的解释 2 1 贪欲 2 1 1 贪欲的满足与快乐的本质 2 1 2 贪欲得不到满足与痛苦的本质 2 2 恶意和愤怒 2 3 愚痴和无知 2 3 1 大众对痴的解释 2 3 2 佛对痴的解

随机推荐

  • 条码规范——Code 93

    CODE 93 BACKGROUND INFORMATION Code 93 was designed to complement and improve upon Code 39 Code 93 is similar in that it
  • 在线代码测试小项目

    小项目 代码在线测试 http是我们生活中最常使用的协议 现如今网络浏览器越来越贴近人们的生活 使得做什么事都很方便 但是想要运行一段代码还得需要在电脑指定的环境下来运行 这在有些情况下让人很抓狂 我在网上也看到过很多代码在线测试的网页 感
  • 模块打包器Webpack详解!

    Webpack 1 什么是Webpack Webpack 是一个前端资源加载 打包工具 它将根据模块的依赖关系进行静态分析 然后将这些模块按照指定的规则生成对应的静态资源 从图中我们可以看出 Webpack 可以将多种静态资源 js css
  • 关于c语言main函数中int argc,char **argv的理解

    关于c语言main函数中int argc char argv的理解 c语言main函数通常形如int main int argc char argv 那么argc和argv代表啥呢 其实 argc表示传入main函数的参数的个数 而argv
  • Spark【Spark SQL(四)UDF函数和UDAF函数】

    UDF 函数 UDF 是我们用户可以自定义的函数 我们通过SparkSession对象来调用 udf 的 register name String func A1 A2 A3 方法来注册一个我们自定义的函数 其中 name 是我们自定义的函
  • MATLAB机器学习方法之朴素贝叶斯算法

    朴素贝叶斯分类算法的核心算法是 或 而如果所有特征都相互独立的话 P 特征 类别k 可以看作 P 特征1 类别k P 特征2 类别k P 特征3 类别k P 特征n 类别k 那么分别计算P 特征 类别1 P 特征 类别2 P 特征 类别3
  • paddlenlp二分类引入评估召回率F1指标 paddle.metric Accuracy

    每个具体的参数代表什么 明确好 无非就是第几个样本 属于某个类别的概率 非常清晰 from paddlenlp metrics import AccuracyAndF1 paddle no grad def evaluate model c
  • 基础知识——BCD码

    十六进制转二进制 将每一位十六进制转化为4位二进制位即可 BCD码 将十进制的每一位转化为4位二进制位即可 转换方法都是将每一位转为4位二进制位 但是区别是一个对应的是十六进制 一个对应的是十进制 比如给出二进制数0101 0101 如果对
  • muduo Timestamp详解

    1 简介 Timestamp用于提供时间戳相关的工具函数 2 类与接口 string toString const 返回时间的字符串形式 例如1649224501 687051 string toFormattedString bool s
  • 在word中插入分页符,多出一行

    类似问题在网上也有多次提及 例如 1 ctrl enter进行分页 但是下一页开头总是多出一行 2 Word换页时 上一页多了一行看不见的行 影响下页的标题编辑 3 word2007分页出现问题 分后多出一行 删除了后面的格式没了 4 wo
  • 点双连通分量&边双联通分量详解

    文章目录 点双连通分量 前言 概念 性质 找割点 找点双 附赠题表 边双连通分量 概念 性质 找割边 找边双 做法1 做法2 题表 一点个人感想 点双连通分量 前言 由于点双和边双都是无向图里面的东西 所以下面的讲解都以图是无向图作为前提
  • 微信小程序之实现下拉刷新效果

    本文章将主要介绍微信小程序如何实现简单的下拉刷新效果的 代码简单明了 主要 api wx showLoading Object object 显示 loading 提示框 wx hideLoading Object object 关闭 lo
  • vue中实现文件批量打包压缩下载(以及下载跨域问题分析)

    上次做了一个选择多个数据生成多个二维码并下载 当时项目催的紧 就简单写了个循环生成二维码下载 一次性会下载很多文件 特别难整理 刚好这次项目又遇到类似这种功能 需要一次性批量下载多个文件 那么就安排下打包下载吧 需要用到的是file sav
  • 区块链技术对人工智能的影响

    区块链技术在最近几年席卷全球 在改变互联网的同时也在改变着其他行业的发展 区块链的技术在当前的发展潜力十分巨大 一些业内人士对区块链技术的预估价值要比互联网高出好几倍 这也说明区块链技术能够影响世界转型格局 人工智能也是近几年兴起的又一热门
  • Extjs 4.2 comboBox下拉复选框 checkbox

    Ext create Ext form field ComboBox name cmb fieldLabel 人员 margin 2 0 2 0 labelWidth 135 labelAlign right editable false
  • ADS系列 - 定向耦合器设计教程1

    相关文章 ADS SystemVue 文章集合页 ADS系列 混频器设计 混频器原理介绍及仿真1 ADS系列 低噪声放大器 LNA 模型下载安装及 LNA仿真设计 Keysight的 SystemVue 介绍及与 ADS 区别对比 Ansy
  • 《银行法律法规》三、银行管理——2、商业银行资产负债管理

    第三章 商业银行资产负债管理 第一节 资产负债管理概述 考点1 资产负债管理的对象 对于商业银行而言 传统资产负债管理的对象即是银行的资产负债表 传统资产负债管理的内涵是 根据外部形势变化及发展战略要求 以资本约束为核心 以资产负债组合管理
  • Hive HiveQL基础知识及常用语句总结

    https blog csdn net u012386109 article details 78214894 https blog csdn net u010385646 article details 53167707 基础语句 CRE
  • Java JDK 安装及环境配置教程

    一 安装 1 安装包 jdk1 8安装包下载路径 2 创建一个英文的文件夹 注意 整个路径不要有中文 建议文件夹直接命名为JDK 3 在该文件夹下创建两个空文件夹 分别为 jdk1 8 和 jre 其中jdk1 8 是我的JDK版本 这个可
  • 还是搜索、索引的问题

    搜索要弄清2个基本问题 1 要搜索出什么类型的entity 2 entity的哪个方面 维度和关键词发生关联的 一般来说可以有多个角度link到entity 一个entity支持多个索引 可以从不同的column检索 对于 web sear