按索引查询elasticsearch嵌套字段(插入顺序)
我有一个带有一些嵌套对象的elasticsearch文档(映射为嵌套字段) 例如:按索引查询elasticsearch嵌套字段(插入顺序),
Warning: implode(): Invalid arguments passed in /data/phpspider/zhask/webroot/tpl/detail.html on line 45
,,我有一个带有一些嵌套对象的elasticsearch文档(映射为嵌套字段) 例如: { “FirstName”:“Test”, “LastName”:“Test”, “成本”:322.54, “电子邮件”:test@test.com", “车辆”:[ { “年份”:2000年, “制造”:“马自达”, “型号”:“6” }, { “年份”:2012年, “制造”:“福特”, “型号”:“F150” } ] } 我试图对数组的特定索引进行聚合,例如,我想对福特制造但仅在第一辆车上的文档成本求和
{
“FirstName”:“Test”,
“LastName”:“Test”,
“成本”:322.54,
“电子邮件”:test@test.com",
“车辆”:[
{
“年份”:2000年,
“制造”:“马自达”,
“型号”:“6”
},
{
“年份”:2012年,
“制造”:“福特”,
“型号”:“F150”
}
]
}
我试图对数组的特定索引进行聚合,例如,我想对福特制造但仅在第一辆车上的文档成本求和
有可能吗?互联网上几乎没有关于elasticsearch嵌套字段的信息,也没有关于其索引/顺序的信息可以实现您想要的,但您还需要将索引顺序作为字段添加到嵌套文档中:
{
"FirstName": "Test",
"LastName": "Test",
"Cost": 322.54,
"Email": "test@test.com",
"Vehicles": [
{
"Year": 2000,
"Make": "Mazda",
"Model": "6",
"Index": 0
},
{
"Year": 2012,
"Make": "Ford",
"Model": "F150",
"Index": 1
}
]
}
然后,您可以使用index
和Make
上的两个条件查询索引,如下所示:
{
"query": {
"nested": {
"path": "Vehicles",
"query": {
"bool": {
"filter": [
{
"match": {
"Vehicles.Index": 0
}
},
{
"match": {
"Vehicles.Make": "Ford"
}
}
]
}
}
}
}
}
在这种特定情况下,查询不会像您所期望的那样产生任何结果。是的,我同意您的看法,这是一个我也想到过的解决方案,但我正在尝试找出是否有一种方法可以在不更改数据的情况下完成查询,因为数据库中已经有很多数据,不幸的是,没有,因为每个嵌套文档都是独立的(但隐藏)文档,它不知道它是包含其他同级的“数组”的一部分,因此需要为每个文档提供“知识”它在父数组中的位置…很容易利用
\u update\u by\u query
API来更新所有文档,而无需重新索引所有内容。我没有时间检查“update\u by\u query”的想法,但听起来不错,我希望这真的可能,无论如何,我的问题的底线是elasticsearch没有保存任何内容这是嵌套文档的顺序,因此如果不添加索引fieldCoo,就不可能做到这一点,很高兴它有帮助!