关联弹性搜索中的类型

时间:2017-08-23 15:31:39

标签: json elasticsearch nosql

我有以下弹性搜索索引my-test-index,文档按以下类型分组:

所有者

  {
    "_index": "my-test-index",
    "_type": "owner",
    "_id": "AV4GXRQmXr6DxJJbKJTy",
    "_source": {
      "owner": "Jane",
      "pet": "cat",
      "city": "NYC"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "owner",
    "_id": "AV4GXRQmXr6DxJJbKJT0",
    "_source": {
      "owner": "Jason",
      "pet": "snake",
      "city": "Boston"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "owner",
    "_id": "AV4GXRQmXr6DxJJbKJTz",
    "_source": {
      "owner": "Jack",
      "pet": "dog",
      "city": "NYC"
    }
  },

输入:

  {
    "_index": "my-test-index",
    "_type": "type",
    "_id": "AV4GXXuyXr6DxJJbKJUU",
    "_source": {
      "pet": "snake",
      "type": "reptile"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "type",
    "_id": "AV4GXXuyXr6DxJJbKJUT",
    "_source": {
      "pet": "dog",
      "type": "mammal"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "type",
    "_id": "AV4GXXuyXr6DxJJbKJUS",
    "_source": {
      "pet": "cat",
      "type": "mammal"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "type",
    "_id": "AV4GXXuyXr6DxJJbKJUW",
    "_source": {
      "pet": "penguin",
      "type": "bird"
    }
  },
  {
    "_index": "my-test-index",
    "_type": "type",
    "_id": "AV4GXXuyXr6DxJJbKJUV",
    "_source": {
      "pet": "parrot",
      "type": "bird"
    }
  }

我想知道每个主人有哪些宠物类型。例如,简有一只哺乳动物,因为她的猫是“哺乳动物”。如何在Elastic Search中编写查询以检索此信息?或者,如果在单个查询中无法实现此目的,我该如何执行以下步骤?

  1. 检索my-test-index
  2. 中所有宠物的列表
  3. my-test-index/type
  4. 中搜索每只宠物的类型

1 个答案:

答案 0 :(得分:0)

如果您在所有者文档中包含该类型,则此woudl是一个简单的术语聚合,其中包含对所有者进行过滤的查询。您也可以考虑父/子,但如果解决方案是在文档中添加单个字段,我会尝试这样做并保持简单。