es各类SearchType的意思 元素 含义 QUERY_THEN_FETCH 查询是针对所有的块执行的,但返回的是足够的信息,而不是文档内容(Document)。结果会被排序和分级,基于此,只有相关的块的文档对象会被返回。由于被取到的仅仅是这些,故而返回的hit的大小正好等于指定的size。这对于有许多块的index来说是很便利的(返回结果不会...
但是有时候,你可能会遇到奇特的打分场景,在这些情况中,知道如何使用DFS query then fetch去进行搜索执行过程的微调还是有用的。
query then fetch(默认) 1.向所有分片发起请求,只返回排序及排名相关的信息,整体进行重新排序,取前n个文档 2.去相关的shard取document 优点: 返回的数据量准确 缺点: 性能一般,排名不准确 DES query and fetch 比第一种方式多了DES操作. 即在查询之前,向所有分片发送请求,返回所有分片中的词频和文档频率并进行...
$ 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"} "_...
SearchRequestBuilder searchRequestBuilder = transportClient.prepareSearch(index); if (StringUtils.isNotEmpty(type)) { searchRequestBuilder.setTypes(type.split(",")); } searchRequestBuilder.setSearchType(SearchType.QUERY_THEN_FETCH); // 需要显示的字段,逗号分隔(缺省为全部字段) if (StringUtils.isNot...
es的每个shard对应一个lucene index,即一个独立的算分单位。当设置多个分片时,查询的文档在不同分片上会分别计算相关性得分,可能会导致最终的得分是不准的。es提供参数search_type=dfs_query_then_fetch使得es能够在获得所有文档后重新计算相关性得分,此种方式会消耗较多cpu和内存。
private SearchType searchType = SearchType.DEFAULT:搜索类型 QUERY_THEN_FETCH 首先根据路由算法向相关分片发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然 后对各个分片的结果进行汇聚、排序。然后选取客户端需要获取的数据条数(top n)。最后根据doc-umentId再向各个分片请求具体的文档信息。
这里query_then_fetch具体的搜索的流程图如下: (图片来自官网) 查询阶段包含以下四个步骤: 客户端发送一个 search 请求到 Node 3 , Node 3 会创建一个大小为 from + size 的空优先队列。 Node 3 将查询请求转发到索引的每个主分片或副本分片中。每个分片在本地执行查询并添加结果到大小为 from + size 的本...
search type ES目前有两种搜索类型: 代码语言:java 复制 DFS_QUERY_THEN_FETCHQUERY_THEN_FETCH(默认) 两种不同的搜索类型的区别在于查询阶段,DFS查询阶段的流程要多一些,它使用全局信息来获取更准确的评分。 本章的流程分析默认搜索类型。下面我们仍旧按照请求涉及的节点来分析流程,搜索流程涉及两个节点:协调节点和数...
②搜索附带search_type=dfs_query_then_fetch参数,会将local IDF取出来计算global IDF ---使用minumum_should_match去长尾 比如搜索5个关键词,但是很多结果只匹配上一个关键词。和想要的数据相差甚远,这些结果就长尾。 比如搜索 "java hadoop es python",设置minumum_should_match=75%,就是最少匹配到三个词语才...