自定义查询–关于倒排索引的研究

最近学习了es的视频,感觉这个产品对于查询来说非常方便,但是如何应用到我们自己的 产品中来呢。因为我们的产品数据更新太快,其实不太适合用es做主力存储。并且我们的业务还没有到那种巨量级别,产品的服务器容量也有限,所以我打算根据es的倒排索引的原理,自己写一个查询的组件。

我的理解是这样的,有大量的文字需要进行模糊查询,在mysql中,如果使用like的话是非常合适的,目前我就是采用这种方式查询的,因为数据量还未到千万级别,速度也还行,不过马上要突破了,所以要考虑优化的事情了。所以我的思路是这样的:

1 首先将数据库中的大段文字和标题都提取出来。

2 这些文字都对应了主键。

3 使用jcseg分词将一段文字进行分词,然后将分好的词语主键保存到redis中去。

4 为了节省空间,只分重要的业务关键字,其他无关的分词都不需要。

5 因为数据量巨大,在进行数据提取的时候,采用了线程池,优化了采集速度。

使用的代码如下:

中文分词代码

1 本文提供了倒排索引的思路,比较浅显,还可以深入研究

2 使用本组件将关键字放入redis之后,页面上传入的关键字就可以在redis中对应key,这样的速度将非常快,从key中可以找到主键,再用主键到mysql中查询,大大提高了查询速度。

3 需要考虑的问题,如何做到更新就加入关键字到redis中去。是采用实时变更就加入,还是定时一分钟,或者一小时加入,需要结合业务来处理。

Original: https://www.cnblogs.com/machine-matrix/p/16534476.html
Author: liandyao
Title: 自定义查询–关于倒排索引的研究

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/592278/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java Class 文件中Method的存储

    class文件是java编译后的文件类型。其代表一个类,其有专门的存储格式。其中会存放数据也会存放方法,而所谓的方法存放就是将方法中的调用都转换成java字节码指令。所方法调用从机…

    Java 2023年5月29日
    081
  • nginx重新整理——————nginx 的网络模型[九]

    前言 简单介绍一下nginx的网络模型。 正文 网络拓扑图: 数据流: 网络传输大概是这样传输的。 nginx 事件循环: 事件处理过程: 上面两张图什么意思呢? 其实就是说,ng…

    Java 2023年5月30日
    061
  • Java—多线程入门

    前置知识 什么是进程,什么又是线程?咱不是讲系统,简单说下,知道个大概就好了。 进程:一个可执行文件执行的过程。线程:操作系统能够进行运算调度的 最小单位。它被包含在进程之中,是进…

    Java 2023年6月7日
    065
  • 从Go编程看IO多路复用Select

    IO多路复用通过某种机制使进程监听某些文件描述符,当文件描述符中有读或写就绪时,进程能够收到系统内核发送的相应通知从而进行相应的IO操作;IO多路复用有:select、poll、e…

    Java 2023年6月16日
    067
  • js 设置滚动条位置为底部

    if (document.getElementById(“”)) { document.getElementById(“”).scr…

    Java 2023年6月8日
    085
  • Java 全栈知识体系-JUC线程池: ThreadPoolExecutor详解

    本文主要对ThreadPoolExecutor详解。@pdai JUC线程池: ThreadPoolExecutor详解 带着BAT大厂的面试问题去理解 为什么要有线程池 Thre…

    Java 2023年5月29日
    071
  • java 的多态 学习理解

    Father a = new Son(); 子类的实例引用 可以 无障碍 赋给 超类的对象变量; 可调用的方法: 以对象变量a 为例, a 能调用的方法 主要看 左边 的类型 里有…

    Java 2023年6月13日
    073
  • Dubbo

    远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及”请求-响应”模式的信息交换方式。 集群容错: 提供基于接口方法的透明远…

    Java 2023年6月8日
    068
  • 浅析Java双亲委派机制及其作用

    双亲委派机制:当某个类加载器准备加载一个.class字节码文件时,它首先将这个加载任务委派给上一级类加载器,上一级加载器再委派到更上一级类加载器,递归这个操作直到最顶级的类加载器。…

    Java 2023年6月8日
    069
  • Flink SQL 批模式下 ClickHouse 批量写入

    Flink SQL 批模式下 ClickHouse 批量写入 内置使用 JdbcBatchingOutputFormat 批量处理类 pom依赖 ru.yandex.clickho…

    Java 2023年6月16日
    071
  • 八、变量与常量

    一、变量 1.1、变量的基本概念 Java是一种强类型语言,每个变量都必须声明其类型。Java变量是程序中最基本的存储单元,其要素包括变量名、变量类型和作用域。 type varN…

    Java 2023年6月5日
    060
  • Oracle总结一

    1.1 数据 数据是描述事物的符号,它有多种表现形式:文本,图形,音频,视频。计算机处理数据的基本单位是字节。 1.2 数据库(Database, 简称DB) 同粮库,车库类似,数…

    Java 2023年6月8日
    070
  • Node.js(四)json

    html > 汽车管理系统 汽车管理系统 {{car.id}} {{car.name}} {{car.price}} {{car.speed}} {{car.color}} …

    Java 2023年6月15日
    061
  • 如何使用(扫描)二维码进行登录

    一、项目背景 这是我加入博&#x5BA2…

    Java 2023年6月14日
    068
  • SpringBoot整合MybatisPlus基本的增删改查,保姆级教程

    概述 MybatisPlus是国产的第三方插件, 它封装了许多常用的CURDapi,免去了我们写mapper.xml的重复劳动,这里介绍了基本的整合SpringBoot和基础用法。…

    Java 2023年6月8日
    061
  • iBoxDB的学习与使用

    1. 引言 说说iBoxDB的优点: 1)无需安装,不像其他数据库比如MongoDB, MySQL 需要安装。iBOXDB只需要某个目录存放最终的数据即可。完全就像操作本地文件一 …

    Java 2023年6月5日
    053
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球