当前位置: 首页 > 面试题库 >

在ElasticSearch中使用Bulk.IndexMany指定_id字段

邴烨
2023-03-14
问题内容

我在使用批量API(C#NEST v5.4)插入文档时遇到问题。我有一个文档数组,在数组中有我的ID。

我的代码是:

documents = documents .ToArray();

Client.Bulk(bd =>
bd.IndexMany(documents,
    (descriptor, s) => descriptor.Index(indexName)));

如何 使用描述符手动 插入 _id

提前致谢!


问题答案:

您可以使用_id类似的方法在上设置索引名称BulkDescriptor。鉴于以下POCO

public class Message
{
    public string Content { get; set; }
}

例如,使用递增计数器设置ID

var documents = new[] {
    new Message { Content = "message 1" },
    new Message { Content = "another message" },
    new Message { Content = "yet another one" }
};

var indexName = "index-name";   
var id = 0;

client.Bulk(bd => bd
    .IndexMany(documents, (descriptor, s) => descriptor.Index(indexName).Id(++id)));

产生以下请求

POST http://localhost:9200/_bulk
{"index":{"_index":"index-name","_type":"message","_id":1}}
{"content":"message 1"}
{"index":{"_index":"index-name","_type":"message","_id":2}}
{"content":"another message"}
{"index":{"_index":"index-name","_type":"message","_id":3}}
{"content":"yet another one"}


 类似资料:
  • 问题内容: 我上课,尝试在elasticsearch中将其设置为字段。我指的是来自Elasticsearch- dsl文档的持久示例。 我受限制,但无法正常工作。 我得到解决方案作为覆盖方法并且实现了这一点 我正在创建这个对象 有没有没有覆盖方法的直接设置方法? 问题答案: 有几种分配ID的方法: 你可以这样 像这样: 另请注意,在ES 1.5之前,可以指定一个字段用作文档(在您的情况下可能是),

  • 问题内容: 我有一个文档,其中包含许多我从未查询过的字段,因此我想关闭这些字段的索引以节省资源。我相信我需要禁用该字段,但是如何指定要对哪些字段建立索引呢? 问题答案: 默认情况下,所有字段也都在_all特殊字段内建立索引,该字段开箱即用地提供了所谓的catchall功能。但是,可以通过以下选项为映射中的每个字段指定是否要将其添加到_all字段: 上面的示例禁用了name字段的默认行为,该行为不会

  • 问题内容: 我正在尝试将Timelion插件用于kibana。 我在elasticsearch中有一个数据集,其结构可能是这样的: 我想将字段显示为y轴和x轴,该怎么办? 我尝试了该功能,但此功能似乎将计数设置为默认值,而不是数据源中的“值”字段。 问题答案: Timelion将预定义的时间间隔用于其时间图。为了绘制“值”作为时间的函数,您可以将粒度设置为“自动”并使用以下字符串: 您也可以将粒度

  • 问题内容: 在我的数据集中,一个文档包含20多个带有嵌套对象的字段。它们大多数是长文本字段。这些字段对于全文搜索很重要,但是我们只需要在输出中显示标题,简短描述和ID。 是否可以在ElasticSearch中为全文查询指定输出字段?(如MongoDB中的投影) 问题答案: 我认为您正在寻找搜索请求的属性: 允许有选择地为搜索命中表示的每个文档加载特定字段。默认情况下加载内部 字段。 这些字段将自动

  • 我有一个搜索索引,包含一个名为的字段,它是一个数组。当我没有向查询中添加节时,标签值会出现在结果中,但当我添加了节时,它会被完全忽略,并且不会出现在结果中,如下所示。 这是否有原因或已知的问题?是ElasticSearch的某种保留词吗? 我使用的是ES版本1.1.2(Lucene 4.7)。