【问题标题】:Is any extra overhead to store non index field(JSON) as Object instead of text in Elasticsearch将非索引字段(JSON)存储为对象而不是 Elasticsearch 中的文本是否有任何额外开销
【发布时间】:2019-08-12 22:52:43
【问题描述】:

我有两个选项可以将 JSON 存储到 Elasticsearch 中,表示为对象字段(在第一个映射中提到)和序列化并存储为文本(在第二个映射中提到)。将非索引字段作为对象而不是文本存储到 Elasticsearch 中是否有任何额外开销?

第一次映射:

{
 "properties": {
     "user_json": {
       "enabled": false,
        "type": "object"
   }
 }

二次映射:

{  "properties":
   {   
   "user_json": {
    "enabled": false,
    "type": "text"   
    } 
 }

任何帮助将不胜感激。

【问题讨论】:

  • textobject 是两种完全不同的类型。如果您希望存储序列化的 JSON 数据,则应避免使用 text 并改用 keyword,因为您可能不会在该数据中进行搜索。
  • @Val 好主意。但是大 JSON 是有可能的。存储对象与关键字有什么优势吗?
  • enabled 只能在 object 字段上设置。如果您需要从 _source 检索该 JSON,这很有用,但您将无法搜索任何嵌套字段。 keyword 仅在您想将该 JSON 存储为序列化 JSON 文本时才有意义。所以这取决于你的用例。查看更多信息here
  • 我不想在这个字段上搜索只存储参考。

标签: elasticsearch lucene


【解决方案1】:

我可能会使用object 类型并将enabled 设置为false

使用 keyword 而不需要对该字段进行聚合、排序或完全匹配实际上没有任何意义,并且会在没有明显原因的情况下占用倒排索引中的空间。

您仍然可以从 _source 检索 JSON 对象。

【讨论】:

  • 这个运气好吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多