ElasticSearch
1.用途
- 搜索引擎:爬虫
- 电商搜索:数据库
- 站内搜索:系统数据
- 文件搜索:磁盘
- 使用案例一:
ELK 结合使用,用于微服务架构下不同机器上微服务的日志聚合,日志分析。
使用案例二:
当我们打开淘宝,京东,等电商网站的时候,尝试输入一些关键词,然后系统就会给我们提供一些搜索建议。
这种场景其实也是ES 使用的一个经典案例。
使用案例三:
Github使用Elasticsearch检索1300亿行的代码
使用案例四:
维基百科使用Elasticsearch提供全文搜索并高亮关键字,以及输入实时搜索(search-as-you-type)和搜索纠错(did-you-mean)等搜索建议功能。
使用案例五:
StackOverflow结合全文搜索与地理位置查询,以及more-like-this功能来找到相关的问题和答案
创建索引流程
一个原始文档对应一个document
-
文档每个属性放到field中
例如:文件名,内容,大小。。。
- field相关属性:
- 数据类型:文本类型,数值类型,日期
- 是否索引,是否在字段进行查询
- 是否分词
- 是否存储
每个document有一个唯一id
分词处理
把需要分词的field中的内容进行分词处理
根据空格字符拆分
去除标点符号
去除停用词
-
转换大小写
得到一个最终的单词列表,每个关键词封装成一个term对象关键词
其中包含两部分
1.关键词本身
2.关键词所在的field
查询索引
- 获取用户查询内容
- 对用户输入的内容分析
- 需要使用分词器对用户输入内容进行分词
- 把查询的内容进行封装
- 封装成query对象
- 根据query对象查询索引,把查询结果合并。需要根据匹配相关度打分,根据得分降序排列。
- tf:关键词在单个文章中出现的频率;tf越高相关度越高
- df:关键词在多个文章中出现的频率:df越高相关度越低
节点
data节点
node.master:false
node.data:true
协调节点
node.master:false
node.data:false
cluster state