- 基于Apache Lucene 被认为是迄今为止最好的,最先进的,性能最好的,功能最全的搜索引擎库
- Elasticsearch :
- 分布式的实时的文件存储,每个字段都被索引并可以被搜索。
- 分布式的实时分析搜索引擎
- 可动态扩展,处理PB级别的数据
- Java API 提供两种内置的客户端
- node client :节点客户端
- 以无数据的节点的身份加入到集群中,知道集群的位置,能够将请求直接发送到对应的节点上。
- Transport client :传输客户端
- 更轻量的客户端能够发送请求到远程集群,不加入集群,只是简单的转发请求到集群中的节点。
- 9300端口链接,使用es的传输协议
- node client :节点客户端
- 基本命令:
- _search:搜索命令
- query:filtered
- about :全文搜索 match about
- match_phrase:短语搜索
- hightlight:高亮
- aggs all_interests:可以分级汇总
- 倒排索引
- 使用倒排索引,所以es很快
- 采用乐观并发控制,用version版本号来进行确保修改和删除的
- 深分页问题
- 最多1000-5000也就是一次查询10000条
- es的分页原理是:size 一页的条数,from跳过开始的结果
- 在集群中分页,需要把所有分片产生的结果汇总然后排序。
- 例子:假设一个集群中有5个主分片,请求第一页时,每个分片都要查询顶端的10个结果,然后返回请求节点,请求节点排序后在选出TOP10结果。假如请求第1000页,需要查询每个分片数据顶端的10001-10010,然后请求节点对所有的结果也就 [分片数*(分页数+size)]进行排序找出顶端的,在抛弃total -10个记录。排序的结果随着分页的深度成倍的增长
- 可以动态的水平扩展
- 确切值查询和全文文本查询
- 确切值查询:就是存在不存在
- 全文本:文章,话语,片段
- 分析和分析器
- 分析器:当存储的时候会进行分析,进行索引
- 自定义字段的映射
- String
- index:三个属性 analyed 需要分析这个字段,然后索引,not_analyzed 索引这个字段,但是不分析此字段,no 不索引这个字段 默认是 analyed
- String
- es默认的分析器:standard。可以用analyzer 来设置分析器: whitespace,simple english
- 结构化查询
- query bool可以合并多个字句
- 过滤要比查询快,因为过滤有缓存
- term 过滤 terms 过滤 range 范围过滤 gt 大于 gte 大于等于 lt 小于 lte 小于等于
- _validate/query 可以用来检验一天查询语句是不是正确的 _validate/query?explain 可以返回更多的信息
- 相关性排序:默认排序 scor
- sort 排序 一般是日期来排序:“sort”:{“date”:{“order”:“desc”}} 会将日期转换成毫秒进行排序,可以进行多级排序。多值排序可以选择mode 包含 min max avg 或者sum模式
- 查询的步骤:假设有note1 note2 note3,当note3得到一个查询请求时,首先在本地建立一个队列from+size,然后对其他note进行广播,其他节点也取from+size的数据,返回给note3,note3 整理排序。取size个返回,其他的结果舍弃
- 扫描和滚屏:scan 和scroll 可以取会大量数据而不需要进行深分页。scroll 每一次请求都会返回一个_scroll_id,如果返回null,就是全部查询完成了
Elasticsearch 学习笔记
最新推荐文章于 2025-02-15 16:31:03 发布