es各类SearchType的意思 元素 含义 QUERY_THEN_FETCH 查询是针对所有的块执行的,但返回的是足够的信息,而不是文档内容(Document)。结果会被排序和分级,基于此,只有相关的块的文档对象会被返回。由于被取到的仅仅是这些,故而返回的hit的大小正好等于指定的size。这对于有许多块的index来说是很便利的(返回结果不会...
但是有时候,你可能会遇到奇特的打分场景,在这些情况中,知道如何使用DFS query then fetch去进行搜索执行过程的微调还是有用的。
$ curl -XGET 'localhost:9200/startswith/test/_search?pretty=true&search_type=dfs_query_then_fetch' -d '{ "query": { "match_phrase_prefix": { "title": { "query": "d", "max_expansions": 5 } } } }' | grep title "_score" : 1.9162908, "_source" : {"title":"dzone"} "_...
query then fetch(默认) 1.向所有分片发起请求,只返回排序及排名相关的信息,整体进行重新排序,取前n个文档 2.去相关的shard取document 优点: 返回的数据量准确 缺点: 性能一般,排名不准确 DES query and fetch 比第一种方式多了DES操作. 即在查询之前,向所有分片发送请求,返回所有分片中的词频和文档频率并进行...
private SearchType searchType = SearchType.DEFAULT:搜索类型 QUERY_THEN_FETCH 首先根据路由算法向相关分片发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然 后对各个分片的结果进行汇聚、排序。然后选取客户端需要获取的数据条数(top n)。最后根据doc-umentId再向各个分片请求具体的文档信息。
es的每个shard对应一个lucene index,即一个独立的算分单位。当设置多个分片时,查询的文档在不同分片上会分别计算相关性得分,可能会导致最终的得分是不准的。es提供参数search_type=dfs_query_then_fetch使得es能够在获得所有文档后重新计算相关性得分,此种方式会消耗较多cpu和内存。
query_then_fetch,默认的搜索类型。 所有的搜索系统一般都是两阶段查询: 第一阶段查询到匹配的docID,第二阶段再查询DocID对应的完整文档。这种在ElasticSearch中称为query_then_fetch,另一种就是一阶段查询的时候就返回完整Doc,在ElasticSearch中叫query_and_fetch,一般第二种适用于只需要查询一个Shard的请求。因为这...
search type ES目前有两种搜索类型: 代码语言:java 复制 DFS_QUERY_THEN_FETCH QUERY_THEN_FETCH (默认) 两种不同的搜索类型的区别在于查询阶段,DFS查询阶段的流程要多一些,它使用全局信息来获取更准确的评分。 本章的流程分析默认搜索类型。下面我们仍旧按照请求涉及的节点来分析流程,搜索流程涉及两个节点:协调节点...
fetch merge SearchQueryThenFetchAsyncAction标准查询流程 1、Query 首先遍历shard,执行shard查询请求。 代码语言:javascript 复制 for(final SearchShardIterator shardIt:shardsIts){shardIndex++;final ShardRouting shard=shardIt.nextOrNull();if(shard!=null){performPhaseOnShard(shardIndex,shardIt,shard);}else{...
SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch(index); if (StringUtils.isNotEmpty(type)) { searchRequestBuilder.setTypes(type.split(",")); } searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); // 需要显示的字段,逗号分隔(缺省为全部字段) if (StringUtils.isNot...