zoukankan      html  css  js  c++  java
  • 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
      三个维度:
      • 检索词频率 关键词在文章中出现的次数
      • 反向文档频率 多个关键词中的某个如果在大量文章中都出现了, 降低其权重
      • 字段长度准则 关键词占文章总长度的比重 比重越高, 相关性越大

    开发搜索引擎

    • 爬虫
    • 分布式存储
    • 分析
    • 建立倒排索引
    • 相关性排序
  • 相关阅读:
    局域网内其他机器访问本机80网站失败记录
    百度经纬度获取
    Win10安装安卓ADB驱动
    SQL Server 查看数据库是否存在阻塞
    IP地址接口小结
    雄冠条码PV系统-2016-05-17-收获
    slf4j MDC使用
    Java NIO之通道
    Java NIO之缓冲区
    记一次ThreadPoolExecutor面试
  • 原文地址:https://www.cnblogs.com/oklizz/p/11443211.html
Copyright © 2011-2022 走看看