Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用geoshape特性映射创建索引_C#_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Nest - Fatal编程技术网 elasticsearch,nest,C#,elasticsearch,Nest" /> elasticsearch,nest,C#,elasticsearch,Nest" />

C# 使用geoshape特性映射创建索引

C# 使用geoshape特性映射创建索引,c#,elasticsearch,nest,C#,elasticsearch,Nest,我正在使用Elasticsearch的NEST客户端库为特定类型创建索引 该类型包含三个字符串属性,外加一个用于保存geo_形状类型(特别是用于信封形状) 问题是,生成的请求无法在ES中解析: { "error": "MapperParsingException[mapping [layer]]; nested: MapperParsingException[No handler for type [point] declared on field [boundingBox]]; ",

我正在使用Elasticsearch的NEST客户端库为特定类型创建索引

该类型包含三个
字符串
属性,外加一个用于保存
geo_形状
类型(特别是用于
信封
形状)

问题是,生成的请求无法在ES中解析:

{
   "error": "MapperParsingException[mapping [layer]]; nested: MapperParsingException[No handler for type [point] declared on field [boundingBox]]; ",
   "status": 400
}
NEST生成此错误消息的请求是:

POST /metadata
{
  "settings": {
    "index": {
      "number_of_shards": 1,
      "number_of_replicas": 0
    }
  },
  "mappings": {
    "layer": {
      "_all": {
        "enabled": false
      },
      "properties": {
        "namespace": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "abstract": {
          "type": "string"
        },
        "boundingBox": {
          "type": "point",
          "tree": "geohash",
          "tree_levels": 2,
          "distance_error_pct": 0.025
        }
      }
    }
  }
}
我发现唯一阻止此请求成功的是
boundingBox
属性的
类型
声明,该属性的值应该是
geo_shape
而不是
point

这里是用于执行调用的C#代码:

ElasticClient client = new ElasticClient(settings);

IIndicesOperationResponse response = client.CreateIndex(c => c
    .Index("metadata")
    .NumberOfShards(1)
    .NumberOfReplicas(0)
    .AddMapping<ESLayer>(m => m
        .Type("layer")
        .AllField(a => a.Enabled(false))
        .Properties(p => p
        .String(x => x.Name(n => n.Namespace))
        .String(x => x.Name(n => n.Name))
        .String(x => x.Name(n => n.Abstract))
        .GeoShape(x => x
            .Name(n => n.BoundingBox)
            .Tree(GeoTree.Geohash)
            .TreeLevels(2)
            .DistanceErrorPercentage(0.025)))));
请注意,我正在使用NEST附带的
EnvelopeGeoShape
类来表示边界框属性

Elasticsearch版本:1.3.1

嵌套版本:1.0.2


有没有关于我可能缺少什么的线索?

ES中没有点的类型。根据您的要求,您应该使用“geo_point”或“geo_shape”

见:

此外:


编辑:您正在使用的映射选项是针对geo_形状类型的

这肯定是一个bug;接得好。我刚刚打开了这个问题,并推动了修复。它将包含在我们计划很快发布的下一个版本(1.1.0)中。同时,您可以从我们的CI构建中获取NuGet包:。

谢谢,我意识到了这一点。但是我不是手工向ES写请求,而是通过NEST库。我的问题更多的是关于用于创建索引的.NET代码,如果它缺少什么,或者我可能面临一个嵌套错误。谢谢@Greg,听到这个消息很高兴!我将在下一版本发布后立即切换到下一版本。同时,我想测试一下夜间构建,但是myget现在似乎已经停止了。这个软件包还有其他来源吗?至少对我来说,Myget似乎工作得很好。唯一的另一个选择是克隆GitHub repo并编译解决方案。今天也尝试访问myget,现在它对我有效。干杯
private class ESLayer
{
    public string Namespace { get; set; }

    public string Name { get; set; }

    public string Abstract { get; set; }

    public EnvelopeGeoShape BoundingBox { get; set; }
}