Elasticsearch Search API 概述与URI Search

​本节开始,将详细介绍Search API的使用。

Search API概述

详细API如下:

  • public final SearchResponse sear-ch(SearchRequest searchReques-t, RequestOptions options) throws IOException

  • public final void searchAsync(Sear-chRequest searchRequest, Reque-stOptions options, ActionListener li-stener)

    SearchRequest类图:

    SearchRequest类图

其关键属性说明如下:

  • private SearchType searchType = SearchType.DEFAULT:搜索类型

    1. QUERY_THEN_FETCH
      首先根据路由算法向相关分片发送请求,此时只返回documentId与一些必要信息(例如用于排序等),然 后对各个分片的结果进行汇聚、排序。然后选取客户端需要获取的数据条数(top n)。最后根据doc-umentId再向各个分片请求具体的文档信息。

    2. QUERY_AND_FETCH
      在5.4.x版本开始废弃,直接向各个分片节点请求数据,每个分片返回客户端请求数量的文档信息,然后汇聚并全部返回给客户端,返回的数据为客户端请求数量size * (路由后的分片数量)。

    3. DFS_QUERY_THEN_FETCH

      在开始向各个节点发送请求之前会先进行一次词频与相关性的计算,后续处理流程与QUERY_THEN_F-ETCH相同,可以看出该查询类型的文档相关性会更高,但性能比QUE-RY_THEN_FETCH要差。

  • private String[] indices:待查询的索引库。

  • private String routing:路由字段值。

  • private String preference:复制组内倾向性。

  • private SearchSourceBuilder sour-ce:查询主体(rerquest body),后续会重点讲解。

  • private Boolean requestCache:是否开启查询缓存。

  • private Boolean allowPartialSearc-hResults:是否允许部分成功。

  • private Scroll scroll:滚动API(用于分页)

  • private int batchedReduceSize = DEFAULT_BATCHED_REDUCE_SIZE:批量归并size:默认为512

  • private int maxConcurrentShardRequests = 0:建议最大值别超过256,其核心含义待研究。

  • private int preFilterShardSize = 128,其核心作用待研究。

  • private String[] types:待查询的类型。

接下来再来重点关注一下查询API几个通用的参数:

  • timeout
    查询的超时时间。

  • from
    查询开始的偏移量,分页参数,类似于关系数据库的分页的start。默认值为0。

  • size
    批量获取条数,用于分页查询。

  • search_type
    查询类型,6.4.0只支持QUERY_T-HEN_FETCH与DFS_QUERY_TH-EN_FETCH。

  • request_cache
    查询缓存,如果设置为false,取决于index级别的设置,将在索引管理API时详细讲解。

  • search_results
    是否允许部分成功,例如一个查询请求需要向3个分片发出请求,如果只有两个分片成功返回结果而另外一个出现故障。如果设置为false则会返回整体失败,如果设置为true则会成功部分结果,默认为true。

  • terminate after
    一个查询为每个分片最多收集的文档数,当达到该数量是,查询会提前结束。

  • batched_reduce_size
    在协调节点上应该立即减少一次请求需要访问的分片数量,如果一次请请求需要汇聚太多节点上的数据容易造成内存消耗,该值可作为一个保护机制,控制一个请求同一时间并发访问的最大分片数量,默认为512。

注意:search_type,request_cache和allow_partial_search_results这三个参数,必须查询url级别的参数(query str-ing parameters),如果使用Rest low Le-vel API时需要特别留意。

URI Search

Elasticsearch支持使用URI请求模式来使用Search API,并不支持查询请求体中所有参数,该模式主要用途是用于测试,诸如使用CURL查询命令等。

URI Search示例如下:

1GET twitter/_search?q=user:kimchy

URI Search支持如下参数:

  • q
    定义查询字符串,其语法映射为DSL查询语法之query_string。

  • df
    查询字符串未使用字段前缀时定义的默认字段。

  • analyzer
    针对查询字符串使用的分词器。

  • analyze_wildcard
    是否分析通配符合前缀查询,默认值为false。

  • batched_reduce_size
    控制协调节点批量发送分片的最大个数,主要是控制协调节点内存的消耗而提供的一种保护机制。

  • default_oprator
    默认操作类型,可选值为and、or,默认值为or。

  • lenient
    是否支持类型转换异常,默认为fa-sle,如果将一个字符类型传递给一个数字类型会抛出异常。如果设置true则忽略该异常。

  • explain
    类似于执行计划,表示对于每一个命中,包含如果得分是如何算出来的,默认为false。

  • _source
    用于对_source字段进行过滤,可以设置false来禁止返回_souce字段。该参数支持通配符表达式,例如ob-j.*,用于字段过滤。

  • stored_fields
    用于字段过滤,已在字段过滤部分详细介绍过。

  • sort
    排序,可以类似于关系型数据库的排序语法:fieldName:asc | desc,也可以使用特殊字段_score(表示按分数,默认值)。

  • track_scores
    当使用排序时,跟踪返回结果中分数计算过程。

  • track_total_hits
    默认值为true,表示在返回结果中返回满足该查询条件的所有记录数。

  • timeout
    查询超时时间,默认永不超时。

  • terminate_after
    是否开启提前结束查询,主要是控制一次查询,从一个分片中返回的最大文档数量,如果开启,返回结果中会包含一个响应参数terminate-d_early,指示是否提前结束。

  • from
    用于分页,起始记录数。

  • size
    用于分页,控制一次查询,从每个分片查询的记录条数。

  • search_type
    查询类型,已在文章开头处介绍。

  • allow_partial_search_results
    是否允许部分分片执行失败,默认为true,也可以集群配置参数:se-arch.default_allow_partial_results来设置默认值。

本节主要是对Elasticsearch Search API有一个概要的认识与如何使用URI进行查询,从下一节开始将深入到Search A-PI各个细节中去,以便大家对Search A-PI的运用得心应手。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,820评论 6 515
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,648评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,324评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,714评论 1 297
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,724评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,328评论 1 310
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,897评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,804评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,345评论 1 318
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,431评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,561评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,238评论 5 350
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,928评论 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,417评论 0 24
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,528评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,983评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,573评论 2 359

推荐阅读更多精彩内容