Elasticsearch参考[6.6] »映射 »映射参数 »fielddata

fielddata编辑

默认情况下,大多数字段都被编入索引,这使得它们可以搜索。但是,对脚本中的字段值进行排序,聚合和访问需要使用不同的搜索访问模式。

搜索需要回答“哪个文档包含此术语?”的问题。虽然排序和聚合需要回答一个不同的问题:“ 这个文档的价值是什么?” 

doc_values对于此数据访问模式,大多数字段可以使用磁盘上的索引时间,但text字段不支持doc_values

相反,text字段使用称为查询时的内存中数据结构 fielddata。第一次将字段用于聚合,排序或脚本时,此数据结构是根据需要构建的。它是通过从磁盘读取每个段的整个反向索引,反转术语↔︎文档关系,并将结果存储在内存中的JVM堆中构建的。

text默认情况下,在字段上禁用Fielddata编辑

Fielddata可能会消耗大量的堆空间,尤其是在加载高基数text字段时。一旦fielddata已加载到堆中,它将在该段的生命周期内保留。此外,加载fielddata是一个昂贵的过程,可能会导致用户遇到延迟命中。这就是默认情况下禁用fielddata的原因。

如果您尝试对text 字段上的脚本进行排序,聚合或访问,您将看到以下异常:

默认情况下,在文本字段上禁用Fielddata。设置fielddata=true为[ your_field_name],以便通过反转索引来加载内存中的fielddata。请注意,这可能会占用大量内存。

在启用fielddata 编辑之前

在启用fielddata之前,请考虑使用text字段进行聚合,排序或脚本的原因。这样做通常没有意义。

在索引之前分析文本字段,以便New York通过搜索new或查找可以找到类似的值 york。当您可能需要调用单个存储桶时terms ,此字段上的聚合将返回new存储桶和york存储桶New York

相反,您应该有一个text用于全文搜索的字段,以及一个 启用了聚合的未分析keyword字段doc_values,如下所示:

PUT my_index
{
  “映射”:{
    “_doc”:{
      “properties”:{
        “my_field”:{ 
          “type”:“text”,
          “fields”:{
            “keyword”:{ 
              “type”:“关键字”
            }
          }
        }
      }
    }
  }
}
在控制台中复制为CURL 视图 

使用该my_field字段进行搜索。

使用该my_field.keyword字段进行聚合,排序或脚本。

text字段上启用fielddata编辑

您可以text使用PUT映射API在现有字段 上启用fielddata ,如下所示:

PUT my_index / _mapping / _doc
{
  “properties”:{
    “my_field”:{ 
      “type”:“text”,
      “fielddata”:是的
    }
  }
}
在控制台中复制为CURL 视图 

您指定的映射my_field应包含该字段的现有映射以及fielddata参数。

fielddata_frequency_filter编辑

Fielddata过滤可用于减少加载到内存中的术语数量,从而减少内存使用量。条款可按频率过滤:

频率过滤器允许您仅加载文档频率介于a minmax值之间的术语,该值可以表示为绝对数字(当数字大于1.0时)或百分比(例如,0.011%1.0100%)。每段计算频率 。百分比基于具有该字段值的文档数,而不是该段中的所有文档。

通过指定细分受众群应包含的最小文档数量,可以完全排除小细分min_segment_size

PUT my_index
{
  “映射”:{
    “_doc”:{
      “properties”:{
        “标签”: {
          “type”:“text”,
          “fielddata”:是的,
          “fielddata_frequency_filter”:{
            “min”:0.001,
            “max”:0.1,
            “min_segment_size”:500
          }
        }
      }
    }
  }
}

转载于:https://my.oschina.net/sin58/blog/3061124

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值