如何在结果中附加脚本字段?

时间:2014-11-04 13:50:34

标签: elasticsearch

我想将一个脚本字段附加到elasticsearch结果中。但我找不到有效的解决方案。

我有一个这样的脚本字段:

{
  "script_fields": {
    "distance": {
      "script": "doc[my_field_name].arcDistance(my_lat, my_lon)",
      "params": {
        "my_field_name": "geopoint",
        "my_lat": 52.5,
        "my_lon": 13.4
      }
    }
  }
}

结果我得到了类似的东西:

"hits": [
    {
        "fields": {
           "distance": [
              0
           ]
        }
    },
    {
        "fields": {
           "distance": [
              500
           ]
        }
    },
    {
        "fields": {
           "distance": [
              1000
           ]
        }
    }
]

但我需要完整的文档和脚本字段。所以我试过这个:

{
  "script_fields": {
    "distance": {
      "script": "doc[my_field_name].arcDistance(my_lat, my_lon)",
      "params": {
        "my_field_name": "geopoint",
        "my_lat": 52.5,
        "my_lon": 13.4
      }
    },
    "source": {
      "script": "_source"
    }
  }
}

但结果我得到了这样的东西:

"hits": [
    {
        "fields": {
            "distance": [
                0
            ],
            "source": [
                {
                    "id": "101",
                    "geopoint": {
                        "lon": 52.5,
                        "lat": 13.4
                    },
                }
            ]
        }
    },
    {
        "fields": {
            "distance": [
                500
            ],
            "source": [
                {
                    "id": "101",
                    "geopoint": {
                        "lon": 52.5,
                        "lat": 13.4
                    },
                }
            ]
        }
    },
    {
        "fields": {
            "distance": [
                1000
            ],
            "source": [
                {
                    "id": "101",
                    "geopoint": {
                        "lon": 52.5,
                        "lat": 13.4
                    },
                }
            ]
        }
    }
]

在这种情况下,所有匹配的源都是相同的。我认为每个文档加载_source,但看起来并不是这样。

如何将脚本字段与文档一起实现,或者这不可能?

1 个答案:

答案 0 :(得分:0)

我走错了路。解决方案是将请求更改为:

{
  "fields": [
    "_source"
  ],
  "script_fields": {
    "distance": {
      "script": "doc[my_field_name].arcDistance(my_lat, my_lon)",
      "params": {
        "my_field_name": "geopoint",
        "my_lat": 52.5,
        "my_lon": 13.4
      }
    }
  }
}

结果看起来比这样:

"hits": [
    {
        "fields": {
            "distance": [
                0
            ],
        },
        "_source": {
            {
                "id": "101",
                "geopoint": {
                    "lat": 52.5,
                    "lon": 13.4
                },
            }
        }
    },
    {
        "fields": {
            "distance": [
                500
            ],
        },
        "_source": {
            {
                "id": "102",
                "geopoint": {
                    "lat": 52.5,
                    "lon": 13.40739378
                },
            }
        }
    },
    {
        "fields": {
            "distance": [
                1000
            ],
        },
        "_source": {
            {
                "id": "103",
                "geopoint": {
                    "lat": 52.5,
                    "lon": 13.4147875
                },
            }
        }
    }
]