ElasticSearch包含List的嵌套类型嵌套类型

时间:2014-07-01 23:27:35

标签: elasticsearch nested nosql

ElasticSearch中是否可以在其中包含带有List的嵌套类型?一个例子就像我想的那样

{
  "name" : "Zach",
  "car" : [
    {
      "make" : "Saturn",
      "model" : "SL",
      "colors": ["Red","Blue","Green"]
     },
    {
      "make" : "Saturn",
      "model" : "Imprezza",
      "colors": ["Pink","Green"]
    }
  ]
}

我如何查询这样的FF?

1)我想询问所有人,他们的汽车是"制造"与#34;土星"并且具有"绿色"

的颜色

2)我想询问所有人的汽车颜色是"绿色"或" PINK"

2 个答案:

答案 0 :(得分:1)

是。我就是这样做的:

步骤1.设置映射:

PUT /index_name
{
  "mappings": {
    "type_name": {
      "properties": {
        "name": {
          "type": "string"
        },
        "car": {
          "type": "nested",
          "properties": {
            "make": {
              "type": "string"
            },
            "model": {
              "type": "string"
            },
            "colors": {
              "type": "string"
            }
          }
        }
      }
    }
  }
}

步骤2.填充索引:

PUT /index_name/type_name/1
{
  "name": "Zach",
  "car": [
    {
      "make": "Saturn",
      "model": "SL",
      "colors": [
        "Red",
        "Blue",
        "Green"
      ]
    },
    {
      "make": "Saturn",
      "model": "Imprezza",
      "colors": [
        "Pink",
        "Green"
      ]
    }
  ]
}

步骤3.查询索引。 注意:您需要使用bool query才能检索包含多个查询参数的文档。

GET /index_name/type_name/_search
{
  "query": {
    "nested": {
      "path": "car",
      "query": {
        "bool": {
          "must": [
            {
              "match": {
                "make": "Saturn"
              }
            },
            {
              "match": {
                "colors": "Green"
              }
            }
          ]
        }
      }
    }
  }
}

答案 1 :(得分:0)

是的,您可以拥有嵌套文档数组。

这是您的解决方案。

创建索引,放置映射和数据。

PUT x3
PUT x3/x4/_mapping
{
   "x4": {
      "properties": {
         "name": {
            "type": "string"
         },
         "car": {
            "type": "nested",
            "properties": {
               "make": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "model": {
                  "type": "string",
                  "index": "not_analyzed"
               },
               "colors": {
                  "type": "string",
                  "index": "not_analyzed"
               }
            }
         }
      }
   }
}

PUT /x3/x4/1
{
  "name": "Zach",
  "car": [
    {
      "make": "Saturn",
      "model": "SL",
      "colors": [
        "Red",
        "Blue",
        "Green"
      ]
    },
    {
      "make": "Saturn",
      "model": "Imprezza",
      "colors": [
        "Pink",
        "Green"
      ]
    }
  ]
}

1)我想询问所有人,他们的汽车是"制造"与#34;土星"并且具有"绿色"

的颜色
POST x3/x4/_search
{
    "filter": {
        "nested": {
           "path": "car",
           "filter": {
               "and": {
                  "filters": [
                     {
                         "term": {
                            "make":"Saturn"
                         }
                     },{
                         "term": {
                            "colors":"Green"
                         }
                     }
                  ]
               }
           }
        }
    }
}

2)我想询问所有人的汽车颜色是"绿色"或" PINK"

POST x3/x4/_search
{
   "filter": {
      "nested": {
         "path": "car",
         "filter": {
            "terms": {
               "car.colors": [
                  "Green" , "Pink"
               ]
            }
         }
      }
   }
}

引用:: nested filtermappingterm filter

希望这会有所帮助!!