我正在努力用facet计数编写ElasticSearch查询。查询本身需要两个条件:
示例文件:
{"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中执行此操作?
答案 0 :(得分:1)
基于ES documentation所说的内容:
虽然搜索查询限制了返回的文档和构面 计数,搜索过滤器仅限制返回的文档 - 但不限制 方面很重要。
这样的事可能有用:
{
"query" : {
"constant_score": {
"filter": {"term": {"user": "editor"} }
}
},
"filter" : {"term": {"tag": "foo"} },
"facets" : {
"tag" : { "terms" : {"field" : "tag"} }
}
}