我运行 ElasticSearch 1.x(很高兴)一年多了。现在是升级到 2.1.x 的时候了。节点应关闭,然后(一个接一个)再次打开。似乎很容易。
但后来我遇到了麻烦。主要问题是我自己创建的字段_uid
,以便我从随机另一个文档中知道文档的确切位置(通过散列值)。这样我就知道只有准确的那个会被退回。在升级期间我得到了
MapperParsingException[Field [_uid] is a metadata field and cannot be added inside a document. Use the index API request parameters.]
但是当我尝试将我的前者映射_uid
到_id
(这也应该足够好)时,我得到了类似的东西。
我使用_uid
参数的原因是因为查找时间比 termsQuery (或类似的)低很多。
我如何仍然使用每个文档中的_uid
or_id
字段来快速(准确)查找某些确切的文档?请注意,我必须同时调用数千个确切的,所以我需要一个类似查询的 ID。也可能会出现文档的_uid
or_id
不存在(在这种情况下,我想要像现在一样的“类似假”的结果)
注意:从 1.x 到 2.x 的升级非常大(过滤器消失了,名称中没有点,没有默认访问权限_xxx
)
更新(无用):
更新映射_uid
或_id
使用:
final XContentBuilder mappingBuilder = XContentFactory.jsonBuilder().startObject().startObject(type).startObject("_id").field("enabled", "true").field("default", "xxxx").endObject()
.endObject().endObject();
CLIENT.admin().indices().prepareCreate(index).addMapping(type, mappingBuilder)
.setSettings(Settings.settingsBuilder().put("number_of_shards", nShards).put("number_of_replicas", nReplicas)).execute().actionGet();
结果是:
MapperParsingException[Failed to parse mapping [XXXX]: _id is not configurable]; nested: MapperParsingException[_id is not configurable];
更新:将名称更改为_id
,而不是,_uid
因为后者是由_type
#构建的_id
。那么我需要能够写到_id
.