当前位置: 首页 > 面试题库 >

在字段数据缓存中仍具有doc_values的not_analyzed字段

廖华翰
2023-03-14
问题内容

在对fielddata与doc_values进行的一些实验中,我遇到了一个奇怪的情况。在我以前的映射中,我根本没有使用doc值。在新的映射中,我已添加doc_values: true到映射中的所有字段,但分析的字符串字段和布尔值(直到2.0才受支持)除外。

因此,详细而言,这是我的处理方式:

重新索引所有数据之前,我重新启动了ES
1.7集群,并使用排序,聚合和脚本字段运行查询以“预热”字段数据缓存。然后,我询问/fielddata端点以了解字段数据缓存的用法。它看起来像这样:

curl -XGET 'localhost:9200/_cat/fielddata?v&fields=*'

id      host   ip            node  total  items.desc.raw more_fields...
rKX7... myhost 192.168.1.100 Doom  32.9mb 2.3mb          ...

如您所见,该字段items.desc.raw使用了2.3mb的堆空间。items类型为,nested并且包含一个字符串多字段以及一个not_analyzed名为的子字段raw。简而言之,该嵌套字段的映射如下所示:

    "items": {
      "type": "nested",
      "properties": {
        "desc": {
          "type": "string",
          "fields": {
            "raw": {
              "type": "string",
              "index": "not_analyzed"
            }
          }
        }
      }
    }

添加doc_values: trueitems.desc.raw,重新索引整个索引并运行一些聚合,再次排序和编写脚本以预热字段数据缓存之后,我/fielddata再次查询了端点,结果如下:

curl -XGET 'localhost:9200/_cat/fielddata?v&fields=*'

id      host   ip            node  total  items.desc.raw some_bools...
tAB5... myhost 192.168.1.100 Yack  2.1mb  9.2kb          ...

因此,fielddata的使用确实确实大大降低了(很好),我看到的唯一字段some_bools是预期的布尔字段(即上面的字段),但令我惊讶的是,我的嵌套not_analyzed字符串字段也出现了,但是空间使用率却低得多。

items.desc.raw仍然出现在字段数据缓存中的原因可能是什么?


问题答案:

我莫名其妙地忘记了全球常规。这就是为什么即使使用doc_values全局序号后仍不能包含,我仍然获得字段数据使用率的原因doc_values

在这里查看更多详细信息



 类似资料:
  • 生成数据表字段缓存optimize:schema 字段缓存仅在部署模式下生效 可以通过生成数据表字段信息缓存,提升数据库查询的性能,避免多余的查询。命令如下: php think optimize:schema 会自动生成当前数据库配置文件中定义的数据表字段缓存,也可以指定数据库生成字段缓存(必须有用户权限),例如,下面指定生成demo数据库下面的所有数据表的字段缓存信息。 php think o

  • 问题内容: 我想从MySQL的某个特定字段最小值的表中选择数据,我已经尝试过了: 请帮忙吗? 问题答案: 这将为您提供在所有记录中具有最低价格的结果。 SQLFiddle演示

  • 问题内容: 我需要将字典保存在模型字段中。我怎么做? 例如,我有此代码: 我应该为“ bill_products =“写什么,以便从我的产品模型到此帐单保存一些随机产品? 这是账单的模型说明: 以及产品的型号说明: 如果还有什么我要补充的请发表评论。谢谢! 问题答案: 我刚刚发现了django-jsonfield软件包,该软件包 是可重用的Django字段,可让您在模型中存储经过验证的JSON。

  • 本文向大家介绍在已创建的具有MySQL TEXT数据类型的字段值中连接字符串,包括了在已创建的具有MySQL TEXT数据类型的字段值中连接字符串的使用技巧和注意事项,需要的朋友参考一下 为此,请使用CONCAT()。让我们首先创建一个表- 使用插入命令在表中插入一些记录- 使用select语句显示表中的所有记录- 这将产生以下输出- 这是将字符串连接为文本数据类型的查询- 让我们再次检查表记录-

  • 问题内容: 我有一个类似以下设置和映射的索引; 我正在努力实现现场通配符搜索的实现。我的示例数据如下: 当我执行以下查询时; 它返回,。我认为,它仍然标记数据。它只能返回。 您能帮上忙吗? 提前致谢 问题答案: 我的解决方案历险记 如您在我的问题中所见,我已经开始审理案件。每当我更改了一部分设置后,一部分便开始工作,而另一部分则停止工作。让我给出我的解决方案历史记录: 1.) 我已将数据索引为默认