简介
- Django
- haystack + es
- haystack起到的作用类似于orm 2.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
三个维度:
- 检索词频率 关键词在文章中出现的次数
- 反向文档频率 多个关键词中的某个如果在大量文章中都出现了, 降低其权重
- 字段长度准则 关键词占文章总长度的比重 比重越高, 相关性越大
开发搜索引擎