网站优化成本,建设项目网站备案申请表,聊城做网站建设的公司,白云企业网站建设ES 分布式搜索的运行机制-腾讯云开发者社区-腾讯云
ES 分布式搜索的运行机制
ES 有两种 search_type 即搜索类型#xff1a;
•query_then_fetch #xff08;默认#xff09;•dfs_query_then_fetch
query_then_fetch query_then_fetch
1.用户发起搜索#xff0c;请求…ES 分布式搜索的运行机制-腾讯云开发者社区-腾讯云
ES 分布式搜索的运行机制
ES 有两种 search_type 即搜索类型
•query_then_fetch 默认•dfs_query_then_fetch
query_then_fetch query_then_fetch
1.用户发起搜索请求到集群中的某个节点。2.query 会被发送到所有相关的 shard 分片上。3.每个 shard 分片独立执行 query 搜索文档并进行排序分页等打分时使用的是分片本身的 Local Term/Document 频率。4.分片的 query 结果只有元数据例如 _id 和 _score返回给请求节点。5.请求节点对所有分片的 query 结果进行汇总然后根据打分排序和分页最后选择出搜索结果文档也只有元数据。6.根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。7.得到详细的文档数据组成搜索结果将结果返回给用户。
缺点由于每个分片独立使用自身的而不是全局的 Term/Document 频率进行相关度打分当数据分布不均匀时可能会造成打分偏差从而影响最终搜索结果的相关性。
dfs_query_then_fetch dfs_query_then_fetch
dfs_query_then_fetch 与 query_then_fetch 的运行机制非常类似但是有两点不同。
1.用户发起搜索请求到集群中的某个节点。2.预查询每个分片得到全局的 Global Term/Document 频率。3.query 会被发送到所有相关的 shard 分片上。4.每个 shard 分片独立执行 query 搜索文档并进行排序分页等打分时使用的是分片本身的 Global Term/Document 频率。5.分片的 query 结果只有元数据例如 _id 和 _score返回给请求节点。6.请求节点对所有分片的 query 结果进行汇总然后根据打分排序和分页最后选择出搜索结果文档也只有元数据。7.根据元数据去对应的 shard 分片拉取存储在磁盘上的文档的详细数据。8.得到详细的文档数据组成搜索结果将结果返回给用户。
缺点太耗费资源一般还是不建议使用。
经验
•虽然 ES 有两种搜索类型但一般还是都用默认的 query_then_fetch 。•当数据量没有足够大的情况下比如搜索类型数据 20GB日志类型数据 20-50GB设置一个 shard 主分片是比较推荐的只设置一个主分片你会发现搜索时省掉好多事情。•不需要文档数据时使用 _source: false 可以避免请求节点到非本机分片的网络耗时以及读取磁盘文件的耗时。•使用 from size 分页时假设你只需要前 10k 条数据里的最后十条那么每个分片也会取 10k 条数据如果你的索引有 5 个主分片那么汇总时就有 5 * 10k 50k 条数据这 50k 条数据是在内存里进行排序和最后的分页的所以深度分页也是比较吃资源的。