关于后端:枯燥无味的Elasticsearch检索参数字典

3次阅读

共计 9216 个字符,预计需要花费 24 分钟才能阅读完成。

2023 年第一篇文章就这样水文了,拿出写了良久的《Elasticsearch 查问申请时参数应用阐明》水一次,懈怠了、兄弟们见谅,从收回来这篇文章开始,懈怠一去不回了兄弟们,让咱们一起在新的一年更进一步。往年打算重心次要还是 Elasticsearch 与 MySQL,如果你想补充一下其余方面的常识欢送留言评论

明天给大家带来的是 Elasticsearch 检索申请的最具体参数阐明,把检索申请中常常用到的与不常常用的都展示进去,上面跟我一起来学习下吧

环境

  • macos10.14
  • elasticsearch 8.1.3
  • jdk8

增加测试数据

首先咱们创立个索引

PUT /zfc-doc-000001
{
  "settings": {
    "index":{
      "number_of_shards":3,
      "number_of_replicas":2
    }
  },
  "mappings": {
    "properties": {
      "title":{"type":"keyword"},
      "content":{"type":"text"},
      "createTime":{
        "type": "date",
        "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" 
      },
      "agreeNum":{"type": "integer"},
      "comment":{
        "type": "nested",
        "properties": {
          "content":{"type":"text"},
          "name":{"type":"keyword"},
          "time":{
            "type":"date",
            "format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
          }
        }
      }
    }
  }
}

退出测试数据

{"index" : { "_index" : "zfc-doc-000001", "_id" : "1"} }
{"title" : "Java 知识点大全","content":"java 泛型,根本类型有哪些","createTime": "2022-12-19","agreeNum":"99","comment":{"name":"张三","content":"学习 java 必备","time":"2022-12-19 09:00:00"} }
{"index" : { "_index" : "zfc-doc-000001", "_id" : "2"} }
{"title" : "MySQL 必知必会","content":"mysql 索引、事务、锁","createTime": "2022-12-18","agreeNum":"500","comment":[{"name":"张三","content":"学习 mysql 通俗易懂","time":"2022-12-18 09:00:00"},{"name":"李四","content":"mysql 入门到精通必备的","time":"2022-12-18 10:00:00"}  ]}
{"index" : { "_index" : "zfc-doc-000001", "_id" : "3"} }
{"title" : "Redis 运维实战","content":"redis 的 rdb 与 aof","createTime": "2022-12-18","agreeNum":"300","comment":[{"name":"小红","content":"redis 的备份","time":"2022-12-18 09:00:00"},{"name":"李四","content": "redis 入门","time":"2022-12-18 15:00:00"}  ]}
{"index" : { "_index" : "zfc-doc-000001", "_id" : "4"} }
{"title" : "Elasticsearch","content":"ES crud","createTime": "2022-12-17","agreeNum":"300","comment":[{"name":"小红","content":"es 的根底 SQL 语法","time":"2022-12-17 09:00:00"},{"name":"李四","content": "es 入门","time":"2022-12-18 16:00:00"}  ]}
{"index" : { "_index" : "zfc-doc-000001", "_id" : "5"} }
{"title" : "常见 MQ 知识点汇总","content":"rabbitmq kafka rockmq activemq","createTime": "2022-12-16","agreeNum":"260","comment":[{"name":"小红","content":"kafka 的根底概念","time":"2022-12-18 09:00:00"},{"name":"李四","content": "事务音讯","time":"2022-12-18 15:00:00"}  ]}

对于索引中 mapping 的字段为啥设置为 nested 类型,具体能够参考历史文章 nested 类型阐明,具体链接给到上面

Nested 嵌套对象类型还挺实用

上面还是简略的先学习一下_search API 的应用,

Search API

GET zfc-doc-000001/_search

_search API 反对如下几种形式

GET /<_target>/_search

GET /_search

POST /<_target>/_search

POST /_search

其中 <_target> 是要检索的索引名称,要检索全副索引能够疏忽此参数或者设置为 * 或者_all

反对的参数

参数有两种设置形式,一种是在 申请门路 参数中设置,另一种是在 申请体 中设置。如果两种都设置,则以 申请门路参数 为准

申请门路参数

  • allow_no_indices

    布尔值,应用含糊匹配或者索引别名搜寻时,当指标索引不存在时,如果为true,返回空数据;如果为false,返回异样内容

    举例如下

    GET zfdc*/_search?allow_no_indices=true

    zfdc 结尾的索引进行检索,咱们是没有该索引的,然而allow_no_indices=true,索引会返回空数据

    {
      "took" : 0,
      "timed_out" : false,
      "_shards" : {
        "total" : 0,
        "successful" : 0,
        "skipped" : 0,
        "failed" : 0
      },
      "hits" : {
        "total" : {
          "value" : 0,
          "relation" : "eq"
        },
        "max_score" : 0.0,
        "hits" : []}
    }

    批改allow_no_indices=false,返回报错内容

    GET zfdc*/_search?allow_no_indices=false
    
    
    # 返回如下
    {
      "error" : {
        "root_cause" : [
          {
            "type" : "index_not_found_exception",
            "reason" : "no such index [zfdc*]",
            "resource.type" : "index_or_alias",
            "resource.id" : "zfdc*",
            "index_uuid" : "_na_",
            "index" : "zfdc*"
          }
        ],
        "type" : "index_not_found_exception",
        "reason" : "no such index [zfdc*]",
        "resource.type" : "index_or_alias",
        "resource.id" : "zfdc*",
        "index_uuid" : "_na_",
        "index" : "zfdc*"
      },
      "status" : 404
    }
    
  • allow_partial_search_results

    可选布尔值,如果为true,则在分片搜寻超时时返回曾经搜寻的局部后果,如果为false,返回异样的报错

  • analyzers

    可选字符串,用于查问字符串的分析器。仅当 q 参数同时应用才无效

  • analyze_wildcard

    可选布尔值,如果为 true,则会剖析通配符或者前缀值,默认false 仅当 q 参数同时应用才无效;

  • batched_reduce_size

    可选的整数值,协调节点上管制的分片数量,如果申请中存在大量的碎片,能够用该值当作爱护机制,缩小搜寻申请的内存开销,默认值512

  • ccs_minimize_roundtrips

    可选布尔值,跨集群检索时协调节点与近程集群之间的网络往返,如果为true,网络往返将最小化

  • default_operator

    可选字符串,查问字符串时的默认运算符,反对 ANDOR,默认 OR, 仅当 q 参数同时应用才无效;

  • df

    可选字符串,查问字符串时未制订字段前缀的状况下用做的默认值的字段,仅当 q 参数同时应用才无效;

  • docvalue_fields

    可选字符串,以逗号分隔的字段列表,返回文档值字段指定

  • expand_wildcards

    可选字符串、通配符模式下能够匹配的索引类型;默认open,反对allopenclosedhiddennone

  • explain

    可选布尔值,默认 false,如果为true,能够返回计分的相干详细信息,相似mysqlexplain关键字

  • from

    可选、整数值,非正数,从 0 开始。也就是分页参数,默认状况下应用 from+size 两个参数管制,然而最大值是 10000,如果超过10000 能够应用search_after api 查问或者批改该参数值

  • ignore_throttled

    可选布尔值,默认true,如果为true,则在解冻时疏忽具体索引、扩大索引或者别名索引

  • ignore_unavailable

    可选布尔值,默认false,如果是false,则在申请不存在的索引或者敞开的索引时返回谬误

  • lenient

    可选布尔值,默认false,如果为true,将疏忽查问字符串中基于格局的查问失败(例如向数字字段提供文本)

  • max_concurrent_shard_requests

    可选整数值,定义该申请同时执行的每个节点的并发分片申请数,这个值用于限度在集群中搜寻的影响,限度并发分片申请的数量,默认5

  • pre_filter_shard_size

    可选整数值,定义一个阈值,如果搜寻申请超过这个阈值就开启提前过滤分片

    咱们查问数据有两个阶段,查问阶段和取回阶段,开启之后分为三个阶段,预过滤阶段、查问阶段和取回阶段

    例如,依照工夫每天生成的索引,log- 年月日,咱们想查问当天的日志,开启之后,很多分片上基本不存在当天的数据,所以不须要去检索,也就是说在对分片检索之前先对分片进行检查一下是否蕴含被查问的数据范畴,如果查问范畴与分片持有的数据范畴没有交加,就跳过该分片

  • preference

    可选字符串,用于搜寻的节点和分片

    • _only_local:仅在本地节点上执行检索
    • _local:在本地节点的分片上进行检索,如果没有指定的节点可用、应用默认办法抉择分片
    • _only_nodes:<node-id>,<node-id>:仅对指定的节点 id 上进行检索,如果没有指定的节点可用应用默认办法抉择分片
    • _prefer_nodes:<node-id>,<node-id>:如果可能对指定的节点 id 上进行检索,如果没有节点可用应用默认办法抉择分片
    • _shards:<shard>,<shard>:仅对指定的分片上进行检索,能够将此值与其余的首选项组合应用,然而 _shards 的值必须在后面,例如:_shards:2,3|_local
    • <custom-string>:自定义的字符串值,任何一个不以 结尾的字符串。如果集群的状态或者选中的分片没有产生扭转,则应用与 <custom-string> 雷同的值应用同样的程序路由到雷同的分片上
  • q

    可选的申请参数查问字符串

    q参数会笼罩申请体中的查问参数,如果同时指定,申请体中的查问有效

    如果不指定字段名就是全副字段中检索

    /_search?q= 字段名: 值 
  • request_cache

    可选的布尔值,如果为 true 的话,则为 size 等于 0 的申请后果进行缓存,默认为索引的级别设置

  • rest_total_hits_as_int

    可选的布尔值,对响应后果 hits.total 在相应中是整数值还是对象的模式展示,默认false

  • routing

    可选字符串,依据自定义值将操作路由到特定的分片

  • scroll

    可选工夫值,保留 scroll 搜寻上下文的工夫值

    默认状况下,该值不能超过 1d(24h),能够应用search.max_keep_alive 批改集群中该设置

  • search_type

    可选字符串,设置搜寻类型,计算相干评分的散布频率

    • query_then_fetch:默认值,搜寻的更快,然而可能评分不太准确
    • dfs_query_then_fetch:全局所有分片检索,进步了评分的准确性,然而相应耗时减少了,导致搜寻速度变慢
  • seq_no_primary_term

    可选布尔值,能够用作乐观锁,如果为true,则返回每个命中申请的最初一次批改的序列号和主键

  • size

    可选整数值,定义返回文档数量,默认10

    默认状况下,分页查问应用 fromsize配合应用,默认最大返回 10000 条记录,如果要查问更多的官网倡议是应用search_after

  • sort

    可选字符串,排序值,以逗号宰割的 <field>:<direction> 列表

  • _source

    可选,指匹配的文档要返回的源文档字段设置,这些字段在相应的 hits._source 中展现,默认为 true

    • true:返回全副的源字段
    • false:不返回
    • <string>:以逗号分隔要返回的字段的列表,反对通配符*
  • _source_excludes

    可选字符串,应用逗号分隔的要排除的字段列表

    如果 _source 为 false,该值会被疏忽

  • _source_includes

    可选字符串,要在响应后果中显示用逗号分隔的字段列表

  • stats

    用于日志记录和统计目标的申请的tag

  • stored_fields

    逗号分隔的存储字段的列表,在文档被命中时返回的字段,如果未指定字段,则响应中不蕴含存储的字段

    如果指定了该字段,_source的值为 false,那咱们能够使 _source 的值为 true,来使响应中返回源字段和响应字段

  • suggest_field

    可选字符串,用于倡议的字段

  • suggest_mode

    指定倡议的模式,默认missing

    • always
    • missing
    • popular

    只有当指定来 suggest_fieldsuggest_text查问字符串参数时该参数能力失效

  • suggest_size

    可选整数值,要返回的倡议数

    只有当指定来 suggest_fieldsuggest_text查问字符串参数时该参数能力失效

  • suggest_text

    可选字符串,返回倡议的源文本,也就是依据该字段的值去倡议

    仅当指定了 suggest_field 查问字符串参数时,能力应用此参数。

  • terminate_after

    可选整数值,每个分片要收集到的最大文档数,如果查问达到此限度,Elasticsearch 会提前终止查问。并且该操作是在排序前收集文档

    默认值0,这不会提前终止查问执行

    咱们应该审慎应用此参数,Elasticsearch 将此参数用于所有的分片,举荐是让 Elasticsearch 主动执行提前终止。咱们应该防止为跨多个数据层以备份索引为指标数据流的申请指定此参数

  • timeout

    可选工夫单位,指定每个分片最大响应工夫,如果超时之后没有收到响应,则申请失败并返回谬误,默认为不超时

  • track_scores

    可选布尔值,如果为true,则计算并返回文档分数,即便分数不用于排序,默认false

  • track_total_hits

    可选整数或布尔值,匹配查问以精确命中数量,默认10000

    如果为 true 则以性能为代价返回精确的命中数量,如果为false,则响应不蕴含与查问匹配的命中总数

  • typed_keys

    可选布尔值,如果为true,则聚合或者倡议名称则在相应中以其各自的类型作为前缀,默认true

  • version

    可选布尔值,如果为true,则返回文档版本

申请体参数

  • docvalue_fields

    可选字符串或者数组对象,指定返回响应后果中 hits.fields 的字段值

    • field:必须字符串,通配符模式,申请返回与此模式匹配的字段名的 doc
    • format:可选字符串,返回文档值的格局,对于日期字段能够指定日期格局,对于数字字段能够指定 DecimalFormat 模式,对于其余字段数据类型不反对此参数
  • fields

    可选字符串或者数组对象,指定返回响应后果中 hits.fields 的字段值

    • field:必选字符串,反对通配符*
    • format:可选字符串,日期和天文空间字段的格局,其余字段数据类型暂不反对此参数。datedate_nanos 承受日期格局。

      geo_pointgeo_shape 承受如下:

      • geojson:默认
      • wkt
      • mvt(<zoom>/<x>/<y>@<extent>) 或者mvt(<zoom>/<x>/<y>)

      mvt的参数如下:

      <zoom>:必选整数,缩放级别,0-29

      <x>:必选整数,x 坐标

      <y>:必选整数,y 坐标

      <extent>:可选整数,平铺一侧的大小,以像素为单位,矢量平铺是四边相等的正方形,默认4096

  • stored_fields

    (可选,字符串)以逗号分隔的存储字段列表,作为命中的一部分返回。如果未指定字段,则响应中不蕴含存储的字段

    如果指定了该字段,_source的值为 false,那咱们能够使 _source 的值为 true,来使响应中返回源字段和响应字段

  • explain

    (可选布尔值),如果为 true 返回计分的相干信息

  • from

    (可选整数),非正数,文档开始的偏移量,默认0

    默认状况下,分页查问应用 fromsize配合应用,默认最大返回 10000 条记录,如果要查问更多的官网倡议是应用search_after

  • indices_boost

    (可选对象数组),从指定索引中晋升计分

    <index>: <boost-value>:索引或者索引别名,反对通配符

    boost-value:是计分的因子,如果想进步计分就设置 大于 1 ,如果在 0 - 1 之间会升高分数

  • min_score

    可选,浮点类型,匹配文档的最小分数值,低于该值的文档不返回

  • pit

    可选、对象,将搜寻限度为工夫点(PIT),如果咱们指定了 PIT,则在申请门路中不能指定<target>

    工夫点须要应用 API 显示读取一个,具体可查阅官网,也可期待本号后续文章的推出

    • id::必选,要搜寻的 PITid
    • keep_alive:可选,工夫值,缩短 PIT 寿命的工夫值
  • query

    查问语句,搜寻条件都在此

  • runtime_mappings

    可选,嵌套对象,在查问时能够定义一个或者多个运行时字段,这些字段的优先级高于同名的映射字段

    <field-name>:字段名称,配置运行时字段必选的

    • type:必选字符串,反对(boolean,composite,date,double,geo_point,ip,keyword,long
    • script:可选字符串,在查问时能够执行的脚本,脚本能够拜访文档的全副上下文,包含 _source 字段以及映射的所有字段及值。该脚本必须用 emit 以返回计算值
  • seq_no_primary_term

    可选布尔值,能够用作乐观锁,如果为true,则返回每个命中申请的最初一次批改的序列号和主键

  • size

    返回的文档数量设置,默认 10,个别应用fromsize配置应用,最多返回 10000 条记录,如果超过10000,官网举荐应用search_after 查问

  • _source

    可选,指定返回哪些字段

    • true:返回全副
    • false:不返回
    • <wildcard_pattern>:字符串或者字符串数组,通配符模式匹配字段返回
    • <object>

      • excludes:要排除的字段,反对通配符
      • includes:要返回的字段,反对通配符
  • stats

    用于日志记录和统计目标的申请的 tag

  • terminate_after

    可选整数值,每个分片要收集到的最大文档数,如果查问达到此限度,Elasticsearch 会提前终止查问。并且该操作是在排序前收集文档

    默认值0,这不会提前终止查问执行

    咱们应该审慎应用此参数,Elasticsearch 将此参数用于所有的分片,举荐是让 Elasticsearch 主动执行提前终止。咱们应该防止为跨多个数据层以备份索引为指标数据流的申请指定此参数

  • timeout

    可选工夫单位,指定每个分片最大响应工夫,如果超时之后没有收到响应,则申请失败并返回谬误,默认为不超时

  • version

    可选布尔值,如果为true,则返回文档版本

响应参数

  • _scroll_id

    该搜寻的全文标识符,能够应用此 IDscroll API配置应用,进行滚动检索,只有在申请中退出了 参数,返回时才会持续返回该参数值用于下一次检索

  • took

    执行该此申请所破费的毫秒数,计算从协调节点收到申请到协调节点筹备发送响应之间的工夫

    其中包含协调节点和数据节点之间的通信工夫,申请在搜寻线程池中期待执行的工夫,理论的执行工夫

    不包含向 Elasticsearch 发送申请所需的工夫,序列化 JSON 响应所需的工夫,向客户端发送响应所需的工夫

  • timed_out

    如果为true,则申请在实现之前超时,会返回局部后果或者返回空

  • _shard

    用于申请的分片计数

    • total:用于查问的分片总数,包含未调配的分片
    • successful:胜利执行的分片数量
    • skipped:跳过申请的分片数量,个别就是预过滤时会产生
    • failed:执行失败的分片数量
  • hits

    返回的文档以及元数据

    • total:文档总数
    • max_score:返回文档的最高计分,对于不依照_score 排序的申请该值是空
    • hits:返回的文档对象数组

      • _index:蕴含返回文档的索引名称
      • _id:返回文档的惟一标识符
      • _score:文档的相关性计分
      • _source:文档的原始 JSON 体,能够应用 _source 指定是否要返回或者自定义返回字段
      • fields:蕴含文档的字段值,必须在申请中应用如下参数指定一个或者多个

        fieldsdocvalue_fieldsscript_fieldsstored_fields,仅当设置了如上的参数才会返回该属性

通过下面的参数学习,咱们曾经学会了搜寻申请所须要的参数,以及响应的参数内容,上面就本人尝试练习一下吧,下一篇将开启新的写作模式

补充:Elasticsearch 除了上述的参数外,还有校验参数等,前面会着重介绍,2023 年第一篇文章就这样草草开始了,新的一轮发文曾经起航

参考

https://www.elastic.co/guide/…

本文由 mdnice 多平台公布

正文完
 0