背景

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

全文搜索

  • 数据分类

    • 结构化数据:固定格式或长度有限的数据,如数据库、元数据等
    • 非结构化数据:不定长或无固定格式的数据,如邮件、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. 计算机体系结构——CH3存储系统

    计算机体系结构--CH3存储系统 右键点击查看图像,查看清晰图像 X-mind 计算机体系结构--CH3存储系统 存储系统原理 主要性能 速度 容量 价格 两种存储系统 Cache与主存储器 虚拟存储 ...

  2. MacBook读写移动硬盘

    在MacBook上插入移动硬盘,只能读取,不能写入.这是因为移动硬盘的格式是NTFS,MacBook不支持写入,有三种方法: 1. 改变移动硬盘的格式,格式化为可以读写的exFAT等格式,但存储的文件 ...

  3. Anacoda下报错conda command not found 以及TypeError: __new__() got an unexpected keyword argument 'serialized_options'

    在anacoda安装完成后,执行conda list命令,显示command not found 解决方法: 对于anaconda 2  , 输入export PATH=~/anaconda2/bin ...

  4. 死磕Spring之AOP篇 - Spring AOP自动代理(二)筛选合适的通知器

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...

  5. element UI el-autocomplete 带输入建议的输入框

    项目需求:需要用户在输入框中输入公司 全名    但是为了避免用户输入不全   需要做一个带输入建议的输入框 参考:https://www.jianshu.com/p/de922caf337c

  6. H5小技巧之——巧用<a>标签锚链接(#锚点链接 #页面特定位置 #DOM定位 #hash路由中使用锚链接)

    #作者:矩阵鱼--代码中游泳的咸鱼 前端开发中,常遇到定位到页面某特定位置的需求,JavaScript提供的el.scrollIntoView() 和 el.scrollIntoViewIfNeede ...

  7. 计算机系统原理:cache容量计算

    Cache容量计算例题: 假定主存地址位数为32位,按字节编址,主存和cache之间采用4-路组相联映射方式,主存块大小为4个字,每字32位,采用直写(Write Throght)方式和LRU替换策略 ...

  8. Java并发-同步容器篇

    作者:汤圆 个人博客:javalover.cc 前言 官人们好啊,我是汤圆,今天给大家带来的是<Java并发-同步容器篇>,希望有所帮助,谢谢 文章如果有问题,欢迎大家批评指正,在此谢过啦 ...

  9. 常用的STL

    map      容器和数组一样,不过比较活用,相当于直接离散化数组 map<int ,int>mp 一维int map<string ,string>mp 一维 str ma ...

  10. 病毒木马查杀实战第021篇:Ring3层主动防御之编程实现

    前言 我们这次会依据上次的内容,编程实现一个Ring3层的简单的主动防御软件.整个程序使用MFC实现,程序开始监控时,会将DLL程序注入到explorer.exe进程中,这样每当有新的进程创建,程序首 ...