Elasticsearch简介和原理

1. ES简介

  • Django
    • haystack + es
    • haystack起到的作用类似于orm 2.x
  • 版本
    • 2.x 5.x 6.x
    • 语法有一定区别, 不兼容
  • 概念
    • 既是搜索引擎, 也是数据库
      • 主要用于全文检索, 和搜索无关的字段不应该保存在ES中
  • 特点
    • 支持分布式 分片存储
    • 虽然是Java开发的, 但是封装了一套http访问接口, 使用restful的设计风格 端口9200
    • 文档型数据库 存字符串, 不是表, 也不是键值对
    • 最受欢迎的搜索引擎

2. ES搜索原理 (重点)

  • 关系数据库查询的缺点
    • 关键词检索
      # 全文检索"python" 范围: 文章标题 和 文章内容
      select * from t_article where title like "%python%" or content like "%python%"
    • 即使title和content字段建立了索引, 也不能完美使用索引, 只对"python%"的查询才会使用索引, 慢查询效率极低
  • ES搜索的原理
    • 分析
    • 建立倒排索引
    • 相关性排序

  • 分析
    • 提取和优化关键词
    • 分词
      • 将搜索内容以词条形式拆分
    • 标准化
      • 忽略大小写
      • 忽略单复数
      • 同义词合并
    • 处理停用词
      • 谓词, 语气词, 主语
  • 倒排/反向索引
    • 正向索引
      • 一条文档为一条记录, 字段为关键词的信息(位置&次数)
      • 缺点
        • 收录到搜索引擎的文档数量是天文数字, 需要查询所有记录, 无法达到实时性
    • 反向索引
      • 以关键字为一条记录, 文档id为字段
      • 虽然关键字数量庞大, 但是一旦查询到关键词, 就可以锁定与其有关的所有文档, 效率高于正向索引
      • 网站SEO时, 要在网页/百度录入时设置精准的关键词, 目的就是为快速反向索引
文档1  The quick brown fox jumped over the , lazy+ dog
文档2  Quick brown foxes leap over lazy dogs in summer

id   quick   brown  fox  jump  dog  summer
1      1       1     1     1    
2              1     1          1      1
....
10000000


关键词     文档1   文档2   ...  文档100000
qucik       1
brown       1      1
fox 
dog         1
summer 
  • 相关性排序
    • 对搜索结果按照权重进行排序
    • 算法 TF/IDF
      • 检索词频率 关键词在文章中出现的次数
      • 反向文档频率 多个关键词中的某个如果在大量文章中都出现了, 降低其权重
      • 字段长度准则 关键词占文章总长度的比重 比重越高, 相关性越大

  • 开发搜索引擎
    • 爬虫
    • 分布式存储
    • 分析
    • 建立倒排索引
    • 相关性排序

猜你喜欢

转载自www.cnblogs.com/oklizz/p/11443211.html