背景

  • 实现网站自带的搜索功能,如淘宝中的商品搜索

全文搜索

  • 数据分类

    • 结构化数据:固定格式或长度有限的数据,如数据库、元数据等
    • 非结构化数据:不定长或无固定格式的数据,如邮件、word文档等
  • 搜索分类
    • 结构化数据搜索:关系型数据库
    • 非结构化数据搜索:顺序扫描(低效)/全文搜索
  • 索引
    • 从非结构化数据中提取出的然后重新组织的信息
    • 非结构化数据->有一定结构的数据
    • 对组织后的数据进行搜索
  • 倒排索引
    • 存储在全文搜索下某个单词在一个或一组文档中的存储位置的映射
    • 文档检索系统中最常用的数据结构
  • 场景
    • 搜索的数据对象是大量的非结构化的文本数据
    • 文件记录量达到数十万或数百万个甚至更多
    • 支持大量基于交互式文本的查询
    • 需求非常灵活的全文搜索查询
    • 对高度相关的搜索结果的有特殊需求,但是没有可用的关系数据库可以满足
    • 对不同记录类型、非文本数据操作或安全事务处理的需求相对较少的情况

Lucene

  • 全文搜索引擎
  • 一个代码库和API
  • 思路
    • 搜集数据
    • 通过数据创建索引
    • 用户输入关键字
    • 通过关键字创建查询器
    • 根据查询器到索引里获取数据
    • 把查询结果展示给用户

Solr

  • 一种非关系(no sql)数据库搜索/存储引擎
  • 封装了Lucene,有HTTP接口
  • 可以和Hadoop一起使用
  • Hadoop处理大量数据,Solr从中找需要的信息
  • 与数据库的区别
    • 搜索速度比关系型数据库快,一般在网站中单独处理搜索功能
    • 数据库不能实现分词效果,只能用模糊查询,效率很低
  • 原理:倒排索引,B+树
  • IK Analyzer:开源的java中文分词工具包

elasticsearch

  • 封装了Lucene
  • 分布式、多租户能力的全文搜索引擎
  • 具有HTTP Web页面和无架构JSON文档
  • 和Solr相比,更易于使用

参考

Solr介绍

https://blog.csdn.net/luo609630199/article/details/82494708

Solr原理

https://www.liangzl.com/get-article-detail-134667.html

全文搜索 Solr Elasticsearch

https://www.cnblogs.com/jajian/p/9801154.html

Solr Elasticsearch 性能比较

https://blog.csdn.net/jameshadoop/article/details/44905643

[Java] Solr & Elasticsearch的更多相关文章

  1. 开源搜索引擎solr elasticsearch学习计划

    其实不单单是研究solr elasticsearch把,进行调研性技术学习时,应该制定一些目标以及里程碑.新的技术调研 学习是一件很爽的事,能学到新技术新东西.但是在学习新技术同时,有几个问题是需要我 ...

  2. 使用java操作elasticsearch(1)

    1.安装elasticsearch 这儿用的是5.6.9的版本,下载安装过程较为简单,在官网上下载好后解压到文件夹.需要注意的是在elasticsearch-5.6.9\config下的elastic ...

  3. java使用elasticsearch实现集群管理

    本篇博客主要是查看集群中的相关信息,具体请看代码和注释 @Test public void test45() throws UnknownHostException{ //1.指定es集群 clust ...

  4. java操作elasticsearch实现组合桶聚合

    1.terms分组查询 //分组聚合 @Test public void test40() throws UnknownHostException{ //1.指定es集群 cluster.name 是 ...

  5. java操作elasticsearch实现query String

    1.CommonTersQuery: 指定字段进行模糊查询 //commonTermsQuery @Test public void test35() throws UnknownHostExcept ...

  6. java操作elasticsearch实现聚合查询

    1.max 最大值 //max 求最大值 @Test public void test30() throws UnknownHostException{ //1.指定es集群 cluster.name ...

  7. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  8. java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)

    1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...

  9. java操作elasticsearch实现查询删除和查询所有

    后期博客本人都只给出代码,具体的说明在代码中也有注释. 1.查询删除 //查询删除:将查询到的数据进行删除 @Test public void test8() throws UnknownHostEx ...

随机推荐

  1. 借鉴Elasticsearch 7.x 深入系列学习

    开始 Elasticsearch 深入系列目录如下: Elasticsearch 7.x 深入 数据准备 Elasticsearch 7.x 深入[1]索引[一]原理 Elasticsearch 7. ...

  2. ELK查询命令详解总结

    目录 ELK查询命令详解 倒排索引 倒排索引原理 分词器介绍及内置分词器 使用ElasticSearch API 实现CRUD 批量获取文档 使用Bulk API 实现批量操作 版本控制 什么是Map ...

  3. 扩展中国剩余定理(EXCRT)学习笔记

    扩展中国剩余定理(EXCRT)学习笔记 用途 求解同余方程组 \(\begin{cases}x\equiv c_{1}\left( mod\ m_{1}\right) \\ x\equiv c_{2} ...

  4. 各种OJ网站,刷题必备

    各种OJ网站 落谷 vijos JoyOI CodeVS Comet OJ 北京大学 浙江大学 杭州电子科技大学 信息学奥赛一本通 以上就是本蒟蒻所知的OJ网站 收集和打字应该值一个赞吧

  5. [C++]变量声明与定义的规则

    声明与定义分离 Tips:变量能且仅能被定义一次,但是可以被多次声明. 为了支持分离式编译,C++将定义和声明区分开.其中声明规定了变量的类型和名字,定义除此功能外还会申请存储空间并可能为变量赋一个初 ...

  6. 使用Vue-TreeSelect组件实现公司-部门-人员级联下拉列表的处理

    最近在改造原有Bootstrap开发框架,增加一个Vue&Element前端的时候,发现需要处理一个级联更新的过程,就是选择公司,然后更新部门,选择部门,或者人员列表,选择作为主管的一个实现, ...

  7. Vue学习笔记(三)

    1 监听 在Vue.js中可以通过watch来监听数据的变化,比如通过watch实现的简单计数器: <div id="app"> <p>计数器:{{coun ...

  8. 孙悟空的身外身法术使用了Java设计模式:原型模式

    目录 定义 意图 主要解决问题 何时使用 优缺点 结构 简单形式的原型模式 登记形式的原型模式 两种形式比较 浅克隆和深克隆 孙悟空的身外身法术 浅克隆实现 深克隆实现 定义 原型模式属于对象的创建型 ...

  9. Springboot项目中使用@RestControllerAdvice注解不生效排查思路

    说明: 在后端编写业务逻辑时,可能会遇到异常抛出处理的情况,后端通常会通过throw出一个异常,然后通过@RestControllerAdvice注解标注自定义类进行统一处理,前端再将接收到的结果解析 ...

  10. linux too many open files 问题总结

    问题描述: kubernetes 集群使用promtail收集日志,发现一段时间有些机器日志收集不到查看promtail日志出现以下报错: error="filetarget.fsnotif ...