1

如果有人可以帮助理解以以下两种形式创建类型之间的真正区别,我将不胜感激:

使用“映射”</h2>

放 /mybestfares_test1

{
    "mappings": {
        "bestfares_data": {
          "dynamic" : false,
            "properties": {
                "airline": {
                    "type": "string",
                    "index": "not_analyzed",
                    "null_value": "N/A"
                },
                "destinationAirport": {
                    "type": "string",
                    "index": "not_analyzed",
                    "null_value": "N/A"
                },
                "originAirport": {
                    "type": "string",
                    "index": "not_analyzed",
                    "null_value": "N/A"
                },
                "sellPrice": {
                    "type": "double",
                    "null_value": 0
                }
            }
        }
    }
}

不使用“映射”</h2>

放置 /mybestfares_test2/

{
    "bestfares_data": {
        "dynamic" : false,
        "properties": {
            "airline": {
                "type": "string",
                "index": "not_analyzed",
                "null_value": "N/A"
            },
            "destinationAirport": {
                "type": "string",
                "index": "not_analyzed",
                "null_value": "N/A"
            },
            "originAirport": {
                "type": "string",
                "index": "not_analyzed",
                "null_value": "N/A"
            },
            "sellPrice": {
                "type": "double",
                "null_value": 0
            }
        }
    }
}

如果我获取这两个索引的索引信息,很明显“mybestfares_test2”没有任何“映射”定义,尽管类型中的每个字段都有特定的设置:

获取 /mybestfares_test2 =>

{
   "mybestfares_test2": {
      "mappings": {},
      "settings": {
         "index": {
            "creation_date": "1423741207570",
            "uuid": "ognGDfnTS7i9AVE1L66UgA",
            "number_of_replicas": "1",
            "number_of_shards": "5",
            "version": {
               "created": "1040299"
            },
            "bestfares_data": {
              "dynamic" : false,
               "properties": {
                  "destinationAirport": {
                     "type": "string",
                     "null_value": "N/A",
                     "index": "not_analyzed"
                  },
                  "sellPrice": {
                     "type": "double",
                     "null_value": "0"
                  },
                  "originAirport": {
                     "type": "string",
                     "null_value": "N/A",
                     "index": "not_analyzed"
                  },
                  "airline": {
                     "type": "string",
                     "null_value": "N/A",
                     "index": "not_analyzed"
                  }
               }
            }
         }
      }
   }
}

当然,使用映射创建的索引对映射{...}部分 GET /mybestfares_test1中的字段具有相同的设置

{
   "mybestfares_test1": {
      "mappings": {
         "bestfares_data": {
          "dynamic" : false,
            "properties": {
               "airline": {
                  "type": "string",
                  "index": "not_analyzed",
                  "null_value": "N/A"
               },
               "destinationAirport": {
                  "type": "string",
                  "index": "not_analyzed",
                  "null_value": "N/A"
               },
               "originAirport": {
                  "type": "string",
                  "index": "not_analyzed",
                  "null_value": "N/A"
               },
               "sellPrice": {
                  "type": "double",
                  "null_value": 0
               }
            }
         }
      },
      "settings": {
         "index": {
            "creation_date": "1423741360578",
            "uuid": "rZ8wc2-2TGKVo8ZVd8YIKg",
            "number_of_replicas": "1",
            "number_of_shards": "5",
            "version": {
               "created": "1040299"
            }
         }
      }
   }
}

我想了解这两个索引之间的哪些事情(如果有)会有所不同?

4

2 回答 2

0

如果您仔细查看响应,您创建的没有映射的第二个索引实际上会获得许多附加设置。因此,在这种情况下,您不提供映射。所以第一个是唯一正确的。

于 2015-02-12T13:05:30.950 回答
0

来自https://www.found.no/foundation/elasticsearch-mapping-introduction/

有两种方法可以提供到 Elasticsearch 的映射。最常见的方式是在索引创建期间:

$ curl -XPOST ...:9200/my_index -d '{
    "settings" : {
        # .. index settings
    },
    "mappings" : {
        "my_type" : {
            # mapping for my_type
        }
    }
}'

提供映射的另一种方法是使用 Put Mapping API。

$ curl -XPUT 'http://localhost:9200/my_index/my_type/_mapping' -d '
{
    "my_type" : {
        # mapping for my_type
    }
}
'

此 API 使我们能够更新现有索引的映射,但在潜在冲突方面存在一些限制。可以将新映射定义添加到现有映射中,并且现有类型可能会更新其配置,但更改类型会被视为冲突并且不被接受。但是,可以将 ignore_conflicts=true 作为参数传递给 Mapping API,但这样做并不能保证产生预期的结果,因为已经索引的文档不会使用新的映射自动重新索引。

因此,在大多数情况下,建议在创建索引期间指定映射而不是使用 Put Mapping API。

于 2015-02-12T14:20:59.360 回答