好的,我已经创建了一个名为users的弹性搜索索引,如下所示:
$response = $client->index([
'index' => 'users',
'type' => 'user',
'id' => Auth::user()->id,
'body' => [
'username' => Auth::user()->username,
'name' => Auth::user()->name,
'city' => Auth::user()->getCity(),
],
]);
我已将某些数据编入索引。我想在此索引中添加一个名为“location”的新字段,以便它现在为:
$response = $client->index([
'index' => 'users',
'type' => 'user',
'id' => Auth::user()->id,
'body' => [
'username' => Auth::user()->username,
'name' => Auth::user()->name,
'city' => Auth::user()->getCity(),
'location' => [$origin],
],
]);
我的问题是如何将该字段添加到现有数据中。我已有用户,但没有位置字段。我需要将该字段添加到旧用户数据中,以便当用户更新其信息时,他们不会丢失任何分片错误
{"error":{"root_cause":[{"type":"document_missing_exception","reason":"[user][130]: document missing","shard":"0","index":"users"}],"type":"document_missing_exception","reason":"[user][130]: document missing","shard":"0","index":"users"},"status":404}
答案 0 :(得分:1)
答案 1 :(得分:1)
我不确定为什么你会看到碎片错过了这样的事情。使用Elasticsearch,默认情况下映射是动态的(请参阅Dynamic Mapping)。这意味着您应该能够像现在一样点击索引API,以便向现有用户文档和新用户文档添加新位置信息,并能够搜索此信息。
这样做的缺点是,您可能已将索引位置信息的文档编入索引,并且后续文档中的位置信息与此类型不匹配(请参阅Field datatypes)。也许,您可能希望对Elasticsearch映射进行很好的控制,以避免遇到类似的问题,或者问题可能完全不同。
编辑:根据最近有关document_missing_exception
的问题中提供的详细信息,这并不相关。