使用数组时我有一个方面计数问题。我有一个你可以看到的要点,以便查看我的实际映射和我正在索引的文档: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查询问题?
答案 0 :(得分:0)
您可以删除过滤器
"filter" : {
"term" : { "participating-org.role" : "leading" }
}
因为它没有任何区别。在计算构面计数时不考虑过滤器,仅考虑过滤搜索结果。
查询
"query" : {
"term" : { "participating-org.role" : "leading" }
}
确实对您的文档和方面产生了影响,但实际上您要求elasticsearch为您提供所有带有participant-org.role引导的文档,并从这些搜索结果中计算出方面。您尝试应用的过滤器将应用于返回的文档,并且返回的文档将用于制作构面。您的文档有多个参与组织内部对象,并且它们始终是角色引导,这就是您选择具有该查询的所有文档的原因。你正在过滤顶级文件 如果您只想排除特定的facet条目,可以这样做,但我认为您对嵌套文档支持更感兴趣。您可以查看Nested type,this有关它的精彩文章,以及如何在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
}
]
}
}
对我来说很棒的解决方案,它有效,但如果你们有任何建议,请放下你的想法。