可能是一个bug在GeoShape过滤器(NEST)

本文关键字:GeoShape 过滤器 NEST bug 一个 | 更新日期: 2023-09-27 18:12:23

不确定bug在哪里,但这是我进入的。下面的代码(一个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
                ]
              ]
            }
          }
        }
      }
    }
  }
}

和一个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的bug吗?我的代码?ES ?

提前感谢!

迈克

可能是一个bug在GeoShape过滤器(NEST)

回答我自己的问题。这确实是NEST中的一个bug,我们可以在NEST作者的注释https://github.com/elasticsearch/elasticsearch-net/issues/776

中看到。