zoukankan      html  css  js  c++  java
  • 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 可以分布式集群,并且可以做一些复杂的数据分析,而且高可用,

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

  • 相关阅读:
    SharePoint 2013 安装.NET Framework 3.5 报错
    SharePoint 2016 配置工作流环境
    SharePoint 2016 站点注册工作流服务报错
    Work Management Service application in SharePoint 2016
    SharePoint 2016 安装 Cumulative Update for Service Bus 1.0 (KB2799752)报错
    SharePoint 2016 工作流报错“没有适用于此应用程序的地址”
    SharePoint 2016 工作流报错“未安装应用程序管理共享服务代理”
    SharePoint JavaScript API in application pages
    SharePoint 2016 每天预热脚本介绍
    SharePoint 无法删除搜索服务应用程序
  • 原文地址:https://www.cnblogs.com/justmehyp/p/10075808.html
Copyright © 2011-2022 走看看