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

最近学习了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.time.LocalDate格式化 及 LocalDate转Date

    undefined import java.time.LocalDate; import java.time.LocalDateTime; import java.time.Zon…

    Java 2023年6月15日
    085
  • 包管理原则

    坊间传闻java web开发人员写了那么多代码,但是其实一半代码都在处理NPE。总是在加班,却大部分时间都在处理包冲突,类加载不了的bug。这些问题总是让新老程序员都很抓狂,有很多…

    Java 2023年6月8日
    096
  • nginx路径匹配中斜线的研究

    互联网应用中,nginx的作用算是一个非常典型且牛逼的存在,它让分布式应用部署变得简洁高效,尤其是在反向代理的配置部署中,nginx的简单易用,功能强大,性能优越。。。 但是,因为…

    Java 2023年5月30日
    083
  • 二:动手实操SpringBoot-使用Spring Initializr创建项目

    使用 Spring Initializr 初始化 Spring Boot 项目 Spring Initializr 从本质上说就是一个Web应用程序,它能为你构建Spring Bo…

    Java 2023年6月8日
    079
  • 多线程(多线程实现方式二【Runnable接口实现】)

    Runnable接口实现多线程 测试类 继承类Thread–实现卖电影票 利用Runnable接口实现电影票的售票 解决线程安全问题—-解决卖电影票程序问题…

    Java 2023年6月5日
    089
  • SpringBoot集成redis简要

    本文为redis服务的独立部署,内置到应用服务中同理,仅需要2、3、4三步(根据情况添加) 大致步骤: 详细步骤: 本人很懒,不想写安装,请移步其他道友: ​ applicatio…

    Java 2023年6月13日
    046
  • 垂直扩展和水平扩展

    对付性能瓶颈,系统本身已无潜力可供压榨,榨无可榨的情况下,可以考虑进行扩展。 扩展方式又可分为垂直扩展和水平扩展2种。 垂直扩展:就是升级机器,加强装备。换一台性能更好的机器,更换…

    Java 2023年6月5日
    075
  • Java与C#间json日期格式互转完美解决方案

    作用一种简单方便的数据传输方案,JSON已经成为替代XML的事实标准。然而在JSON中,时间(DateTime,Timestamp,Date等)格式一直没有很好地统一,当需要跨平台…

    Java 2023年5月29日
    057
  • Dubbo原理解析(非常透彻)

    一.概述 dubbo是一款经典的rpc框架,用来远程调用服务的。 dubbo的作用: 面向接口的远程方法调用 智能容错和负载均衡 服务自动注册和发现。 自定义序列化协议 Dubbo…

    Java 2023年6月7日
    089
  • 作为一个程序员,有什么想对新人说的吗?

    1.工作是我们的生存之本。通过完成工作,公司才能支付我们工资。2.工作是我们技能的最佳## 标题实践,做好工作能同时提高我们的技能。3.通过更好完成工作,同时积累我们对业务的分析、…

    Java 2023年6月13日
    086
  • Java基础语法(真随笔,不完整)

    一、注释 (1)单行注释 // (2)多行注释 / / (3)文档注释 JavaDoc /* /(用来生成自己的API文档) 二、标识符 (1)都以A-Z、a-z、$、_ 开头 (…

    Java 2023年6月6日
    094
  • 最简单的单线程变多线程的例子

    最简单的单线程变多线程的例子 背景 不知道你项目里有么有这样一个函数,这个函数里调用了大概十几来个函数,这十几个函数依次的从头写到位,而且这几个函数都是相对独立的,谁先执行谁后执行…

    Java 2023年6月8日
    085
  • GBase 8t数据库概述

    1.GBase 8t SQL语言的特点: 功能全面:包含定义数据模式、查询数据、更新数据、控制数据访问权限、维护元数据等。这些功能都可以使用SQL完成。 声明式语言:SQL是一种声…

    Java 2023年6月9日
    069
  • [已解决] OpenFeign 调用服务提供者出现的BUG

    java.lang.AbstractMethodError: Receiver class org.springframework.cloud.netflix.ribbon.Rib…

    Java 2023年6月15日
    063
  • 根据Map值 double 类型的进行排序

    /** * 将集合按照降序排列-Double * @param nowPartTwoData * @return */private static List> sortByV…

    Java 2023年6月13日
    094
  • 使用Swing的GUI编程

    Swing AWT:抽象窗口工具包,提供了一套与本地图形界面进行交互的接口,是Java提供的用来建立和设置Java的图形用户界面的基本工具 Swing以AWT为基础的,尽管Swin…

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