Facets Counts in Array数据

时间:2012-09-03 08:38:48

标签: json lucene elasticsearch facets

使用数组时我有一个方面计数问题。我有一个你可以看到的要点,以便查看我的实际映射和我正在索引的文档:https://gist.github.com/3607876

简而言之,我通过搜索API提交此查询:

curl -XPOST 'localhost:9200/org/_search?pretty=true' -d '
{
    "query" : {
        "term" : { "participating-org.role" : "leading" }
    },
    "filter" : {
        "term" : { "participating-org.role" : "leading" }
    },
    "facets" : {
        "organization_facets" : {
            "terms" : { "field" : "participating-org.name" }
        }
    }
}'

我回到了以下方面:

facets: {
    participating-org.name: {
        _type: "terms"
        missing: 0
        total: 8
        other: 0
        terms: [
            {
                term: "def"
                count: 4
            }
            {
                term: "abc"
                count: 4
            }
        ]
    }
}

我不希望这里的“def”条目,因为它的参与组织对象始终具有“领导”角色,而我正试图过滤掉这些条目。我不知道为什么“abc”参与组织的数量也没有“领先”角色。

你们有什么建议吗?是我的映射还是facet查询问题?

2 个答案:

答案 0 :(得分:0)

您可以删除过滤器

"filter" : {
    "term" : { "participating-org.role" : "leading" }
}

因为它没有任何区别。在计算构面计数时不考虑过滤器,仅考虑过滤搜索结果。

查询

"query" : {
    "term" : { "participating-org.role" : "leading" }
}

确实对您的文档和方面产生了影响,但实际上您要求elasticsearch为您提供所有带有participant-org.role引导的文档,并从这些搜索结果中计算出方面。您尝试应用的过滤器将应用于返回的文档,并且返回的文档将用于制作构面。您的文档有多个参与组织内部对象,并且它们始终是角色引导,这就是您选择具有该查询的所有文档的原因。你正在过滤顶级文件 如果您只想排除特定的facet条目,可以这样做,但我认为您对嵌套文档支持更感兴趣。您可以查看Nested typethis有关它的精彩文章,以及如何在this页面底部的嵌套文档上制作方面。

答案 1 :(得分:0)

这个问题的解决方案就在于这个要点:
https://gist.github.com/3616612

结果将是:



    facets: {
        participating-org.role.leading: {
            _type: "terms"
            missing: 0
            total: 4
            other: 0
            terms: [
                {
                    term: "def"
                    count: 4
                }
            ]
        }
    }

对我来说很棒的解决方案,它有效,但如果你们有任何建议,请放下你的想法。