假设我有以下文档:
{
"title": "Some Title",
options: {
"key5": 1,
"key3": 0,
"key1": 1,
}
},
{
"title": "Some Title",
options: {
"key2": 0,
"key3": 0,
"key5": 1,
}
}
我想使用facet从options
对象获取所有键。
如果options
是一个简单的键数组作为字符串,我会简单地使用这样的方面:
"facets" : {
"options" : {
"terms" : {
"field" : "options"
}
}
}
但它在我的情况下不起作用。
因此,如果query
返回这两个文档,我应该得到以下密钥:[“key5”,“key3”,“key1”,“key2”]
我真正需要什么样的方面?
答案 0 :(得分:2)
你不能使用方面来做到这一点。 你有2个选择 -
保留当前的文档结构并从类型映射中获取密钥列表(请参阅http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/indices-get-mapping.html)。这会带来您的类型的方案,其中包含遇到的所有字段。
更改结构。将键也保留为字段,因此您的选项数组将成为一组文档,如:
"options" :
[
{ "key" : "key1", "value" : 1},
{ "key" : "key2", "value" : 0}
]
您可能希望在搜索或分面时保留键值对的上下文,因此将其配置为嵌套类型(http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-nested-type.html)。 然后你可以在“options.key”字段上获得一个顶部键列表。
答案 1 :(得分:0)
如果我理解正确,您可能希望为嵌套选项对象中的每个字段创建terms_facet
。有点像“通配符”?
我认为facet api中没有允许这种操作的功能。如果我没有弄错,必须映射用于分面的字段,因此可以通过检查索引映射在单独的查询中提取字段。