可能是一个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 ?
提前感谢!
迈克回答我自己的问题。这确实是NEST中的一个bug,我们可以在NEST作者的注释https://github.com/elasticsearch/elasticsearch-net/issues/776