杨凌网站建设哪家好,制作网页一般需要兼容哪些网站,最近最新资源在线观看,海外如何淘宝网站建设作者#xff1a;来自 Elastic JD Armada 学习如何使用 _mapping 和 _search API、子字段、合成 _source 和运行时字段来显示 Elasticsearch 索引的字段。
更多阅读#xff1a; Elasticsearch#xff1a;从搜索中获取选定的字段 fields Elasticsearch#xff1a;inverted …作者来自 Elastic JD Armada 学习如何使用 _mapping 和 _search API、子字段、合成 _source 和运行时字段来显示 Elasticsearch 索引的字段。
更多阅读 Elasticsearch从搜索中获取选定的字段 fields Elasticsearchinverted indexdoc_values 及 source ObservabilityElasticsearch 新的索引 mode: Logsdb 初体验 想获得 Elastic 认证吗了解下一次 Elasticsearch Engineer 培训的时间
Elasticsearch 拥有众多新功能帮助你为你的使用场景构建最佳搜索解决方案。浏览我们的示例 notebooks 了解更多开始免费 cloud 试用或在本地机器上体验 Elastic。 本文将讨论如何显示 Elasticsearch 索引的字段。这有助于了解你的数据结构识别特定字段以及排查问题。我们将涵盖以下主题
使用 _mapping API 获取字段信息使用 _search API 显示字段值显示子字段合成 _source运行时字段 1使用 _mapping API 获取字段信息
_mapping API 允许你获取一个或多个索引的映射定义。这包括字段、它们的数据类型以及其他属性的信息。要获取特定索引的映射请使用以下请求
GET /index_name/_mapping
例如如果你有一个名为 my_index 的索引可以使用以下请求来获取它的映射
GET /my_index/_mapping
响应将包含该索引的映射定义其中包含字段及其属性的信息。
你也可以获取某个特定字段的映射。当映射较大且你只关注某个字段时这会很有用。要获取特定字段的映射请使用以下请求
GET /my_index/_mapping/field/my_field
你也可以通过用逗号分隔字段名来获取多个字段的映射如下所示的请求
GET /my_index/_mapping/field/my_field_1,my_field_2,my_field_3 2使用 _search API 显示字段值
要显示 Elasticsearch 索引中字段的值可以使用 _search API。_search API 提供多种方式来控制返回哪些字段主要有以下两种
_source_source 字段包含索引时的原始 JSON 文档正文包括通过摄取管道或预处理步骤所做的任何更改。要从源文档中显示特定字段可以使用源过滤source filtering我们将在下文介绍。fieldsfields 参数允许你在搜索时根据索引映射检索文档中的特定字段。与 _source 不同fields 可以返回存储字段stored fields、doc values 或运行时字段runtime fields的值而无需引用 _source。不过对于没有 doc values 或存储设置的标准字段fields 会回退使用 _source。这样可以带来性能等多方面的优势我们将在下文看到。 使用 _source 字段
默认情况下_search API 会返回 _source 字段它包含被索引的原始 JSON 文档。要显示特定字段你可以在搜索请求中使用 _source 参数添加过滤器这称为源过滤source filtering。
以下是一个搜索请求示例用于返回 my_index 索引中文档的 title 和 author 字段的值
GET /my_index/_search
{query: {match_all: {}},_source: [title, author]
}
在这个例子中_source 参数指定了要返回的字段。
如果你需要更细致的控制可以使用 _source 对象的 includes 和 excludes 属性。例如下面的查询返回顶层的 title 字段和 author 的所有子字段但排除 author.description。
GET /my_index/_search
{query: {match_all: {}},_source: {“includes”: [“title”, “author.*],“excludes”: [“author.description”]}
}
在这个例子中我们使用 author.* 模式来获取 author 对象的所有直接子字段。然后显式排除 author.description这样只返回其他 author 字段。注意这不会提升性能因为仍需加载和解析源 JSON但可以减少通过网络传输的响应大小。 使用 fields 参数
你可以使用 fields 参数过滤搜索响应中返回的字段。相比 _source使用 fields 有以下几个好处 性能提升fields 可以直接从存储字段stored fields或 doc values 返回值无需加载完整的 _source减小响应负载大小。 格式化输出对于标准字段fields 可能回退到 _source 获取值但会参考索引映射正确格式化输出比如格式化日期使其与聚合和排序中使用的格式一致。 访问运行时字段fields 可以返回运行时字段这些字段在原始 _source 中不存在。 更多好处可以参考相关文档。
例如要仅返回 my_index 索引中的 title 和 author 字段可以使用以下搜索请求
GET /my_index/_search
{query: {match_all: {}},fields: [title, author],_source: false
}
在上面的查询中我们将 _source 字段设置为 false这样就不返回源文档。这可以大幅减少响应的负载大小但请注意这仅因为字段 title 和 author 是 keyword 类型且默认启用了 doc_values。如果字段未启用 doc_values 且 _source 设置为 falseElasticsearch 无法检索这些字段它们会在响应中被跳过。
需要注意的是fields 响应总是返回每个字段的值数组即使该字段只有一个值。这是因为 Elasticsearch 没有专门的数组类型任何字段都可能有多个值。关于 Elasticsearch 中数组的更多信息请点击这里。 其他获取字段的方法
虽然推荐使用 _source 或 fields 来获取字段但也有其他方法适用于特定场景例如
Doc value 字段如果你想完全避免使用 _source可以使用 docvalue_fields 参数进行搜索。Doc values 存储与 _source 相同的字段值但采用的是磁盘上的数据结构优化了排序和聚合。
因为它独立于 _source 存储的值你可以请求特定字段而无需加载整个 _source。对于查询大文档但只需要少数字段且这些字段支持 doc values 的情况这很有用。另一个使用 docvalue_fields 的场景是对日期和数值字段使用自定义格式化如下面示例所示。
请注意这只适用于你启用了 doc_values 的字段或默认启用 doc_values 的字段类型如 keyword、date、numeric 和 boolean不适用于 text 或 annotated_text。
在这个例子中我们使用 docvalue_fields 参数来检索 title、author 和 published 字段而不加载完整的 _source 文档
GET /my_index/_search
{query: {match_all: {}},docvalue_fields: [title,author,{field: published,format: epoch_millis}],_source: false
}
当这个查询执行时Elasticsearch 会直接从其磁盘上的列式存储中获取值而不是引用每个文档的 _source。由于查询中提供了 format 参数published 字段以 epoch_millis 格式返回而不是默认格式。
存储字段Stored fields如果你在映射中显式将某些字段标记为 stored可以使用 stored_fields 参数过滤这些字段。当你只想要轻量响应仅包含这些特定字段或想检索你故意存储的字段时这很有用。存储字段独立于 _source因此这种方法也适合避免加载 _source。
需要注意的是这个选项默认是关闭的且通常不推荐使用。建议使用源过滤source filtering来返回原始源文档的某些子集。
在下面的示例查询中我们使用 stored_fields 参数来检索 summary 字段该字段的索引映射配置为 store: true。
GET /my_index/_search
{query: {match_all: {}},stored_fields: [summary]
}
当这个查询执行时Elasticsearch 会检查该字段是否标记了 store: true如果没有找到则会完全跳过该字段。 显示子字段
如果你的索引包含子字段可以在 fields 参数中使用点号表示法指定字段路径。注意子字段不同于 nested 字段类型。例如如果你有一个名为 address.city 的子字段可以这样包含在搜索响应中
GET /my_index/_search
{query: {match_all: {}},fields: [title, author, address.city],_source: false
}
在这个例子中搜索响应将包含 title、author 和 address.city 字段的值。 合成 _source
如果你想保留使用 _source 的功能同时节省磁盘空间可以在索引映射中使用合成 _source。合成 _source 是一个功能允许 Elasticsearch 根据已有的数据如存储字段和 doc values重建 _source即使 _source 被禁用。这能节省大量存储空间但查询时需要即时重建速度会稍慢。你可以在索引设置中使用以下配置来启用此功能
PUT idx
{settings: {index: {mapping: {source: {mode: synthetic}}}}
}
使用合成 _source 的一些好处包括在使用 _search API 时可以完整显示文档支持源过滤并兼容像 Kibana 这样期望 _source 可用的其他功能和工具同时避免存储完整的 _source 文档。 运行时字段
运行时字段Runtime fields允许你在查询时或索引映射的 runtime 块中定义脚本字段。这些字段不会被索引因此添加运行时字段不会增加索引大小但也不会出现在 _source 中。映射中定义的运行时字段是持久的所有查询都可用查询时定义的运行时字段是临时的仅在该次搜索请求中可用。
使用运行时字段的主要好处是能够在数据已被摄取后添加字段简化映射设计。运行时字段也适合用脚本生成原始文档中不存在的值比如格式化字符串或计算分数。
但需要注意运行时字段会影响性能因为每个结果文档都需要运行脚本。你也可以通过 _search API 的 fields 参数来检索运行时字段。 总结
显示 Elasticsearch 索引的字段可以从简单地使用索引映射或 _source 获取值到更高级地使用 fields、docvalue_fields 或运行时字段以获得更高的控制和效率。理解不同方法的权衡对优化搜索体验非常关键。无论是优化响应负载丰富文档内容还是使用合成 _source 节省存储Elasticsearch 都提供了多种工具和功能帮助你以所需方式找到所需数据。这些技术能帮助你理解数据结构识别特定字段并排查问题。 原文How to display fields of an Elasticsearch index - Elasticsearch Labs