0

我在使用数组时遇到了一个方面计数问题。我有一个要点,你们可以查看以查看我的实际映射和我正在索引的文档: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”参与组织也没有“领导”角色。

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

4

2 回答 2

0

您可以删除过滤器

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

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

查询

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

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

于 2012-09-03T10:57:48.983 回答
0

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

结果将是现在:



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

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

于 2012-09-04T04:37:58.633 回答