Elasticsearch简介和原理

简介

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

搜索原理 (重点)

  • 关系数据库查询的缺点
    • 关键词检索
      # 全文检索"python" 范围: 文章标题 和 文章内容 select * from t_article where title like "%python%" or content like "%python%"
    • explain判断操作有没有使用索引,即使title和content字段建立了索引, 也不能完美使用索引, 只对python%的查询才会使用索引, 慢查询效率极低

1. 分析

  • 提取和优化关键词
  • 分词
    • 将搜索内容以词条形式拆分
  • 标准化
    • 忽略大小写
    • 忽略单复数
    • 同义词合并
  • 处理停用词
    • 谓词, 语气词, 主语

2. 倒排/反向索引

  • 正向索引
    • 一条文档为一条记录, 字段为关键词的信息(位置&次数)
    • 缺点
      • 收录到搜索引擎的文档数量是天文数字, 需要查询所有记录, 无法达到实时性
  • 反向索引
    • 以关键字为一条记录, 文档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 

3. 相关性排序

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

开发搜索引擎

  • 爬虫
  • 分布式存储
  • 分析
  • 建立倒排索引
  • 相关性排序
posted @ 2019-09-01 19:08  太虚真人  阅读(414)  评论(0编辑  收藏  举报