elasticsearch elasticsearch中具有任意数量属性的对象的映射,elasticsearch,elasticsearch" /> elasticsearch elasticsearch中具有任意数量属性的对象的映射,elasticsearch,elasticsearch" />

elasticsearch elasticsearch中具有任意数量属性的对象的映射

elasticsearch elasticsearch中具有任意数量属性的对象的映射,elasticsearch,elasticsearch,我有一份文件: { "foo": {} } 其中foo可以具有任意数量的属性。假设我将导入数百万个文档到我的索引中,其中foo的每个属性都有其他值 这意味着动态构建的映射将变得巨大。有什么方法可以告诉elasticsearch类似的东西吗 把你在foo中拥有的所有东西都原封不动地接受(或者将foo字符串化),而不产生百万行映射 或者,在索引文档之前,我必须自己关心吗 如果是这样,我认为有两种解决方案 JSON.stringifyfoo 将foo中的每个属性映射为键/值对,并创建一个对象数组

我有一份文件:

{
  "foo": {}
}
其中
foo
可以具有任意数量的属性。假设我将导入数百万个文档到我的索引中,其中
foo
的每个属性都有其他值

这意味着动态构建的映射将变得巨大。有什么方法可以告诉elasticsearch类似的东西吗

把你在
foo
中拥有的所有东西都原封不动地接受(或者将
foo
字符串化),而不产生百万行映射

或者,在索引文档之前,我必须自己关心吗

如果是这样,我认为有两种解决方案

  • JSON.stringify
    foo

  • foo
    中的每个属性映射为键/值对,并创建一个对象数组:

    // object
    {
      "foo": [
        {"key": "bar1", "value": "bar1's value"},
        {"key": "bar2", "value": "bar2's value"}
      ]
    }
    
    // resulting mapping
    {
      "type": {
        "properties": {
          "foo": {
            "properties": {
              "key": {
                "type": "string" 
              },
              "value": {
                "type": "string" 
              }
            }
          }
        }
      }   
    }
    
  • 您更喜欢解决方案1还是2,为什么


    谢谢你的帮助

    您不能让Elasticsearch为您将其字符串化。您可以让它忽略“foo”下的任何内容,它将成为“\u source”的一部分,但这样它就根本无法搜索

    第二种方法很有意义,这取决于您将如何查询它,以及您对将接受的值的种类了解多少

    描述这种方法时有一个相关的问题,这里有一个可运行的示例:


    其思想是,每个值都有一个嵌套文档。如果每个文档的值数量不是很大,那么这种方法很有效。如果不使用嵌套文档,则如果搜索“键”:“bar1”和“值”:“bar2的值”,则会返回文档。

    谢谢您的回答。我怎么能忽略它呢?如果我这样做,我无法搜索该字段,但当我检索此权限时,它仍将是文档的一部分?找到它:{“enabled”:“false”,“type”:“object”},无论如何,非常感谢您的帮助!