如何在Elasticsearcherch中生成子文档的所有排列

时间:2018-05-29 15:30:06

标签: elasticsearch

您好我有以下用户对象架构:

layerRef

现在我想根据问题答案创建所有用户的计数

因此,请创建用户及其所有问题答案排列的细分:

{Q:1,A:1}并且同时{Q2,A:1},然后{Q:1,A:2}并同时{Q2,A:1} ......等等上。

概念上类似于这种聚合:

#(0000)

我理解为什么这不起作用,因为一个存储桶排除了我希望在子存储桶中存在的文档,但我想知道是否有其他方法可以解决问题curl -X PUT "localhost:9200/test_example" -H 'Content-Type: application/json' -d' { "mappings": { "answer" : { "_parent" : { "type" : "user" } } } } ' curl -X PUT "localhost:9200/test_example/user/_bulk?pretty" -H 'Content-Type: application/json' -d' { "index": {"_id": 1} } { "user": 1, "foo": 1} { "index": {"_id": 2} } { "user": 2, "foo": 2} { "index": {"_id": 3} } { "user": 3, "foo": 1} { "index": {"_id": 4} } { "user": 4, "foo": 1, "answers": {"5": [6,3], "6":[6], "7":[6]}, "potential_approach": true} ' curl -X PUT "localhost:9200/test_example/answer/_bulk?pretty" -H 'Content-Type: application/json' -d' { "index": { "parent": 1}} {"question":5, "answer":6, "negative": false} { "index": { "parent": 1}} {"question":5, "answer":3, "negative": false} { "index": { "parent": 1}} {"question":6, "answer":6, "negative": false} { "index": { "parent": 1}} {"question":7, "answer":6, "negative": false} { "index": { "parent": 2}} {"question":5, "answer":6, "negative": false} { "index": { "parent": 2}} {"question":5, "answer":3, "negative": false} { "index": { "parent": 2}} {"question":6, "answer":1, "negative": false} { "index": { "parent": 2}} {"question":7, "answer":2, "negative": false} { "index": { "parent": 3}} {"question":5, "answer":6, "negative": false} { "index": { "parent": 3}} {"question":5, "answer":2, "negative": false} { "index": { "parent": 3}} {"question":6, "answer":4, "negative": false} { "index": { "parent": 3}} {"question":7, "answer":3, "negative": false} ' 可以做到这一点,但我有子文件而不是嵌套文件。

我可以采取的一种方法是将所有答案存储在我在用户4上添加的表单中的用户对象上,然后类似的东西可以正常工作:

curl -X POST "localhost:9200/test_example/user/_search?pretty&size=1"
-H 'Content-Type: application/json' -d' {   "query": {},   "aggs": {
    "permutations": {
      "children": {
        "type": "answer"
      },
      "aggs": {
        "filtered": {
          "filter": {
            "bool": {
              "should": [],
              "must_not": [],
              "must": [
                {
                  "term": {
                    "question": 5
                  }
                }
              ]
            }
          },
          "aggs": {
            "5": {
              "terms": {
                "field": "answer",
                "size": 500
              },
              "aggs": {
                "filtered": {
                  "filter": {
                    "bool": {
                      "should": [],
                      "must_not": [],
                      "must": [
                        {
                          "term": {
                            "question": 6
                          }
                        }
                      ]
                    }
                  },
                  "aggs": {
                    "6": {
                      "terms": {
                        "field": "answer",
                        "size": 500
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }   } } '

以下查询会生成我想要的内容,我的主要问题是有2000个问题ID,所以我担心对于几百万用户行,Elasticsearch可能会为我爆炸(某些用户可能会回答了500-700个不同的问题)。 我可以使用任何方法来处理答案是子文档的模式吗?或者也许有办法检查ES是否可以处理其中可能包含许多密钥的文档。

0 个答案:

没有答案