ElasticSearch:限制结果但不限制方面计数

时间:2014-05-12 21:20:01

标签: elasticsearch facet

我正在努力用facet计数编写ElasticSearch查询。查询本身需要两个条件:

  1. 限制文档集的条件,排除的文档不应用于构面计数。
  2. 限制结果集但排除文档的条件应该是构面计数的一部分。
  3. 示例文件:

    {"user": "editor", "tag": "foo"}
    {"user": "editor", "tag": "bar"}
    

    查询:

    {
        "query" : { 
            "constant_score": {
                "filter": {"term": {"user": "editor"} }
            }
        },
        "facets" : {
            "tag" : { "terms" : {"field" : "tag"} }
        }
    }
    

    这个查询的结果还可以,我正确看到标签foo + bar的一个方面计数。现在我想扩展查询,以便结果只显示带有标记" foo"但是像以前一样保持小平面计数(因此标记" bar"也应该出现在小平面计数中)。

    例如,如果我像这样修改constant_score过滤器:

    "filter": {
        "and": [{"term": {"user": "editor"}}, {"term": {"tag": "foo"}}]
    }
    
    那么显然只有标签" foo"将出现在facet计数中,所以我需要添加 其他地方的{"term": {"tag": "foo"}}过滤器。

    我如何在ElasticSearch中执行此操作?

1 个答案:

答案 0 :(得分:1)

基于ES documentation所说的内容:

  

虽然搜索查询限制了返回的文档和构面   计数,搜索过滤器仅限制返回的文档 - 但不限制   方面很重要。

这样的事可能有用:

{
    "query" : { 
        "constant_score": {
            "filter": {"term": {"user": "editor"} }
        }
    },
    "filter" : {"term": {"tag": "foo"} },
    "facets" : {
        "tag" : { "terms" : {"field" : "tag"} }
    }
}