NEST ElasticSearch.Raw.IndiciesCreatePost无法获得索引的正确映射

时间:2016-01-26 17:33:09

标签: c# elasticsearch nest

我正在尝试使用NEST来创建一个带有原始json的索引,它产生的结果与我在弹性搜索中交互使用相同的json字符串时产生的结果不同。这是一个错误还是我错误地使用它?

使用以下命令直接发布弹性搜索我得到了我想要的索引映射(结果如下所示)

POST /entities
{
"mappings": {
  "sis_item" : 
  {
    "properties":
    {
      "FullPath":
      {
        "type": "string",
        "index":"not_analyzed"
      },
      "Ident":
      {
        "type": "nested",
        "properties":
        {
          "ObjectGuid":
          {
              "type": "string",
              "index":"not_analyzed"
          }          
        }
      }
    }
  }        
}

检查索引时的结果:GET / entities / :(这是正确的)

{
   "entities": {
  "aliases": {},
  "mappings": {
     "sis_item": {
        "properties": {
           "FullPath": {
              "type": "string",
              "index": "not_analyzed"
           },
           "Ident": {
              "type": "nested",
              "properties": {
                 "ObjectGuid": {
                    "type": "string",
                    "index": "not_analyzed"
                 }
              }
           }
        }
     }
  },
  "settings": {
     "index": {
        "creation_date": "1453828294488",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "version": {
           "created": "1070499"
        },
        "uuid": "6_j4vRcqRwiTQw0E6bQokQ"
     }
  },
  "warmers": {}
   }
}

但是我必须从代​​码执行此操作并使用以下代码,我指定的映射最终会在设置中而不是映射中,如下所示。

                var createIndexJson = @"
                {
                    ""mappings"": {
                        ""sis_item"" :
                        {
                        ""properties"":
                        {
                            ""FullPath"":
                            {
                            ""type"": ""string"",
                            ""index"":""not_analyzed""
                            },
                            ""Ident"":
                            {
                            ""type"": ""nested"",
                            ""properties"":
                            {
                                ""ObjectGuid"":
                                {
                                    ""type"": ""string"",
                                    ""index"":""not_analyzed""
                                }
                            }
                            }
                        }
                        }
                    }
                }";

var response = _client.Raw.IndicesCreatePost("entities_from_code", createIndexJson);
if (!response.Success || response.HttpStatusCode != 200)
{
  throw new ElasticsearchServerException(response.ServerError);
}

结果(不正确,请注意映射嵌套在设置中):

{
 "entities_from_code": {
  "aliases": {},
  "mappings": {},
  "settings": {
     "index": {
        "mappings": {
           "sis_item": {
              "properties": {
                 "FullPath": {
                    "type": "string",
                    "index": "not_analyzed"
                 },
                 "Ident": {
                    "type": "nested",
                    "properties": {
                       "ObjectGuid": {
                          "type": "string",
                          "index": "not_analyzed"
                       }
                    }
                 }
              }
           }
        },
        "creation_date": "1453828283162",
        "number_of_shards": "5",
        "number_of_replicas": "1",
        "version": {
           "created": "1070499"
        },
        "uuid": "fdmPqahGToCJw_mIbq0kNw"
     }
  },
  "warmers": {}
   }
}

1 个答案:

答案 0 :(得分:0)

在json字符串的最顶部有一个换行符导致奇怪的结果,删除它会给我预期的行为。