Elasticsearch - 字段的唯一计数,按在其他字段中包含特定值的文档数进行筛选

时间:2015-12-09 13:14:07

标签: search elasticsearch lucene kibana

我是Elasticsearch的新手,我尝试做一些复杂的搜索,但我找不到如何做,或者即使它可能。

我使用Elasticsearch来存储文档。 所有此文档都有一个userId字段,可能是多个文档中的相同。 它们还有一个包含字符串的documentType字段。

我希望拥有一个至少有n个DocumentType的userId的唯一计数。

目前,如果n = 1我能够使用此请求检索唯一计数:

{ 
"aggs": {
    "docType_file": {
      "filters": {
        "filters": {
          "documentType:\"file\"": {
            "query": {
              "query_string": {
                "query": "documentType:\"file\"",
              }
            }
          }
        }
      },
      "aggs": {
        "unique_user": {
          "cardinality": {
            "field": "userId"
          }
        }
      }
    }
  }
}

但如果我希望n优于1(或者如果我想做其他操作,更少,相等或范围),我就找不到办法。我查看了不同的聚合,但我找不到如何将它们组合起来检索它。

是否可以在Elasticsearch中执行此操作? 任何建议都会很明显。

如有必要,我可以分享更多细节。

谢谢。

更新

我找到了另一种方法来进行查询,之后进行其他聚合可能会更有趣。

{          
"query": {                    
    "filtered": { 
      "query": {    
        "query_string": {                
          "query": "documentType:\"file\""
        }                                             
      }                                 
    }              
  },           
  "aggs": {
    "unique_user": {
      "cardinality": {
        "field": "userId", 
        "precision_threshold": 40000
      }                 
    }                     
  }                                                              
}

但我仍然不知道如何过滤后,我认为我错误地解决了问题,但我没有看到任何其他解决方案。

0 个答案:

没有答案