• ElasticSearch 笔记(一)


    一、Elasticsearch 印象

        分布式、全文检索、数据分析。

    二、为什么不用传统关系型数据库,如 MySQL,做搜索

        举个反例。假设有以下数据库表 t_game:    

    id  name
    1 唐僧取经
    2 西天取经
    3 唐僧不取经

      

        需求:你在搜索输入框中输入 “唐僧取经”,希望找出相关的游戏。

        转化成 SQL 就是:SELECT * FROM t_game where name LIKE '%唐僧取经%';

        LIKE 前后模糊匹配,不走索引,只能全表扫描,数据量很大的话,比如有个 1 千万条记录,就需要扫描 1 千万次,性能肯定很差。

        还有一个问题,当你搜索 “唐僧取经” 的时候,也许 “唐僧不取经” 也是你想要的结果,

        但是 SQL 查询无法匹配这条记录。

        所以,用关系型数据库做搜索,有两大问题:① 全表扫描,性能不好 ② 只能把输入关键字作为一个整体,也就是不能全文检索。

    三、全文搜索 和 倒排索引

       利用一种叫做 “倒排索引” 的东东,大致原理:

       把 t_game 表的 name 字段进行分词,然后记录分出来的词对应的 id

    分词ids
    取经 1、2、3
    唐僧 1、3
    西天 2
    3

       

        然后,对搜索关键字 “唐僧取经” 也进行分词:唐僧、取经。

        第一次拿 “唐僧” 去查倒排索引,可以查到游戏 id 为:1、3 的记录;接着用 “取经” 再去查倒排索引,

        可以查到游戏 id 为:1、2、3 的记录,合并结果就是返回 1、2、3 的记录。

        在本例中,即使数据有千千万,只需要 2 次查询,就可以查到所有结。

        所以,利用 倒排索引,可以解决两个问题:全文搜索、性能问题。

    四、lucene

        简单来说就是一个 jar 包,封装了建立 倒排索引 的算法,已经各种 搜索 算法,可以用来做全文检索。

    五、Elasticsearch

        lucene 虽然可以做全文检索,

        但是只能单机,不能集群,当数据量太大以致单机无法容纳,需要分布式处理时,处理起来很麻烦;

        也不能做复杂的数据分析。

        于是顺其自然的就有了 Elasticsearch,Elasticsearch 可以分布式集群,并且可以做一些复杂的数据分析,而且高可用,

        当一些节点挂掉后,还能正常对外服务。

  • 相关阅读:
    写在彻底转向有道云笔记一个月之后
    KMP算法实现
    有道云笔记 V.S. 为知笔记
    卸载印象笔记,跟印象笔记说拜拜
    ExpandRegion for Sublime Text:快速选择文本
    Linux cat命令详解
    Vim安装插件
    Vim与正则表达式
    还没供暖
    在Linux命令行中设置并使用代理服务器
  • 原文地址:https://www.cnblogs.com/justmehyp/p/10075808.html
Copyright © 2020-2023  润新知