我有一个JSON存储在_source中,有n个字段,但不是所有的字段都被索引或存在于索引Map中。如果我需要索引一个新字段或添加一个新字段到_source中已经存在的索引/索引Map中,最好的方法是什么?
我知道的唯一方法是用更新的索引Map重新索引到一个新的索引。
这也带来了下一个好奇心是有一种方法重新索引数据的地方或在同一个索引。
我们保持动态Map为false,所以我们只索引选定的字段。
我有一个JSON存储在_source中,有n个字段,但不是所有的字段都被索引或存在于索引Map中。如果我需要索引一个新字段或添加一个新字段到_source中已经存在的索引/索引Map中,最好的方法是什么?
我知道的唯一方法是用更新的索引Map重新索引到一个新的索引。
这也带来了下一个好奇心是有一种方法重新索引数据的地方或在同一个索引。
我们保持动态Map为false,所以我们只索引选定的字段。
1条答案
按热度按时间ki1q1bka1#
如果您将动态Map设置为false,这通常是防止Map爆炸并保持对Map的控制的好主意,并且您希望向索引添加新字段,则可以使用update mapping API简单地更新索引Map,然后使用update by query API更新索引。
例如,假设您有以下索引,其中包含单个字段和dynamic false:
字符串
然后索引以下文档:
型
过了一段时间,您的需求发生了变化,您需要向文档中添加第二个字段,例如下面的字段:
型
您可以按
field1
搜索,并在搜索Lorem
时找到这两个文档。但是,按field2
搜索不会产生任何结果,因为该字段已被忽略。然而,它在您的源代码中可用。你需要做的是更新你的Map来添加你的新字段,就像这样:
型
此时,所有新索引的文档中的
field2
都将被正确索引。但是所有以前索引的文档中的field2
仍然没有被索引。为此,您需要使用以下update by query调用更新您的数据:型
当调用返回时,您将能够在所有文档中搜索
field2
,无论是旧文档还是新文档。在field2
中搜索Ipsum
将返回具有上述ID的文档。