可能是GeoShape过滤器(NEST)中的错误

时间:2014-07-11 09:49:13

标签: c# json elasticsearch nest

不确定错误的位置,但这就是我的意思。 以下代码(GeoShape过滤查询):

List<List<double>> gs_polygone_quiberon = new List<List<double>>() { 
            new List<double>() {-3.183515, 47.542491} 
            , new List<double>(){-3.095624, 47.537624} 
            , new List<double>(){-3.026788, 47.478487}
            , new List<double>() {-3.190896, 47.452956}
            , new List<double>() {-3.183515, 47.542491} 
        };

var results = client.Search<Elastic_Oi>(s => s
    .AllIndices()
    .From(0)
    .AllTypes()
    .Size(10)
    .Query(q => q.Filtered(
                f => f.Filter(x =>
                    x.GeoShape("GeoShapeLocation", d => d.Type("polygon").Coordinates(gs_polygone_quiberon))
                    )
                )
    )
);

生成以下JSon:

{
  "from": 0,
  "size": 10,
  "query": {
    "filtered": {
      "filter": {
        "geo_shape": {
          "GeoShapeLocation": {
            "shape": {
              "type": "polygon",
              "coordinates": [
                [
                  -3.183515,
                  47.542491
                ],
                [
                  -3.095624,
                  47.537624
                ],
                [
                  -3.026788,
                  47.478487
                ],
                [
                  -3.190896,
                  47.452956
                ],
                [
                  -3.183515,
                  47.542491
                ]
              ]
            }
          }
        }
      }
    }
  }
}

在NEST中出现400错误。

直接在ES中执行Json会生成空指针异常。为了能够执行查询,我必须在“坐标”字段中添加缩进级别,如下面的Json(我在[]

中包含所有“坐标”字段值
{
  "from": 0,
  "size": 10,
  "query": {
    "filtered": {
      "filter": {
        "geo_shape": {
          "GeoShapeLocation": {
            "shape": {
              "type": "polygon",
              "coordinates": [[
                [
                  -3.183515,
                  47.542491
                ],
                [
                  -3.095624,
                  47.537624
                ],
                [
                  -3.026788,
                  47.478487
                ],
                [
                  -3.190896,
                  47.452956
                ],
                [
                  -3.183515,
                  47.542491
                ]
              ]]
            }
          }
        }
      }
    }
  }
}

此查询的工作方式类似于魅力,但无法使用Nest重现,GeoShape过滤器的Coordinates方法采用IEnumerable<IEnumerable<double>>参数,而不是IEnumerable<IEnumerable<IEnumerable<double>>>参数。

Nest中的错误是什么?我的代码? ES?

提前致谢!

麦克

1 个答案:

答案 0 :(得分:1)

&#34;应答&#34;我自己的问题。这是NEST中的一个错误,我们可以在NEST作者评论中看到https://github.com/elasticsearch/elasticsearch-net/issues/776