我们将Elasticsearch用于库搜索界面。我们的问题是在嵌套字段上使用过滤器时为嵌套字段获取正确的聚合数。
我们的映射最好总结为:一项工作,有零个或多个出版物。为了酿造而简化的映射:
{
"work":{
"properties":{
"publication":{
"type":"nested",
"properties":{
"language":{
"type":"string",
"index":"not_analyzed"
},
"format":{
"type":"string",
"index":"not_analyzed"
}
}
},
"mainTitle":{
"type":"string"
},
"partTitle":{
"type":"string"
}
}
}
}
在我们的搜索结果中,我们展示了作品,但我们会在其出版物中过滤语言和格式。聚合也是语言和格式。聚合中的存储区用于向Web UI中的用户显示过滤选项: Picture showing our filter categories and filters
供参考,以下是一个示例查询,其中启用了“Book”格式和“Norwegian”语言的过滤器:Query
搜索结果是正确的。应用格式“书籍”和语言“挪威语”只会返回出版物同时出版书籍和挪威语的作品。应用“书籍”格式和“挪威语”和“瑞典语”将只返回出版物是挪威书籍或瑞典书籍的作品。
问题是聚合数(显示为过滤器后括号内的数字)不正确。正确的行为是:
例如应用过滤器“Book”以及从聚合中获得的内容是“Finnish(3)”,然后3应表明工作结果中共有3个出版物是芬兰书籍。
相反,会发生什么:
显示的数字只是芬兰语出版物的数量,但不限于书籍,也可能是其他格式,如DVD或蓝光音频。如果没有芬兰语书籍,用户在启用芬兰语过滤器时甚至可能会收到“无结果”。
非常感谢任何有关如何解决此问题的提示!