-
Notifications
You must be signed in to change notification settings - Fork 1.2k
/
Copy pathBulkDescriptor.cs
134 lines (121 loc) · 5.52 KB
/
BulkDescriptor.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Linq.Expressions;
using Elasticsearch.Net;
using Nest.Domain;
using System.Collections.Concurrent;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
namespace Nest
{
public partial class BulkDescriptor : FixedIndexTypePathDescriptor<BulkDescriptor, BulkRequestParameters>
{
internal IList<BaseBulkOperation> _Operations = new SynchronizedCollection<BaseBulkOperation>();
public BulkDescriptor Create<T>(Func<BulkCreateDescriptor<T>, BulkCreateDescriptor<T>> bulkCreateSelector) where T : class
{
bulkCreateSelector.ThrowIfNull("bulkCreateSelector");
var descriptor = bulkCreateSelector(new BulkCreateDescriptor<T>());
if (descriptor == null)
return this;
this._Operations.Add(descriptor);
return this;
}
/// <summary>
/// CreateMany, convenience method to create many documents at once.
/// </summary>
/// <param name="objects">the objects to create</param>
/// <param name="bulkCreateSelector">A func called on each object to describe the individual create operation</param>
public BulkDescriptor CreateMany<T>(IEnumerable<T> @objects, Func<BulkCreateDescriptor<T>, T, BulkCreateDescriptor<T>> bulkCreateSelector = null) where T : class
{
bulkCreateSelector = bulkCreateSelector ?? ((d, o) => d);
foreach (var descriptor in @objects.Select(o => bulkCreateSelector(new BulkCreateDescriptor<T>().Object(o), o)))
this._Operations.Add(descriptor);
return this;
}
public BulkDescriptor Index<T>(Func<BulkIndexDescriptor<T>, BulkIndexDescriptor<T>> bulkIndexSelector) where T : class
{
bulkIndexSelector.ThrowIfNull("bulkIndexSelector");
var descriptor = bulkIndexSelector(new BulkIndexDescriptor<T>());
if (descriptor == null)
return this;
this._Operations.Add(descriptor);
return this;
}
/// <summary>
/// IndexMany, convenience method to pass many objects at once.
/// </summary>
/// <param name="objects">the objects to index</param>
/// <param name="bulkIndexSelector">A func called on each object to describe the individual index operation</param>
public BulkDescriptor IndexMany<T>(IEnumerable<T> @objects, Func<BulkIndexDescriptor<T>, T, BulkIndexDescriptor<T>> bulkIndexSelector = null) where T : class
{
bulkIndexSelector = bulkIndexSelector ?? ((d, o) => d);
foreach (var descriptor in @objects.Select(o => bulkIndexSelector(new BulkIndexDescriptor<T>().Object(o), o)))
this._Operations.Add(descriptor);
return this;
}
public BulkDescriptor Delete<T>(Func<BulkDeleteDescriptor<T>, BulkDeleteDescriptor<T>> bulkDeleteSelector) where T : class
{
bulkDeleteSelector.ThrowIfNull("bulkDeleteSelector");
var descriptor = bulkDeleteSelector(new BulkDeleteDescriptor<T>());
if (descriptor == null)
return this;
this._Operations.Add(descriptor);
return this;
}
/// <summary>
/// DeleteMany, convenience method to delete many objects at once.
/// </summary>
/// <param name="objects">the objects to delete</param>
/// <param name="bulkDeleteSelector">A func called on each object to describe the individual delete operation</param>
public BulkDescriptor DeleteMany<T>(IEnumerable<T> @objects, Func<BulkDeleteDescriptor<T>, T, BulkDeleteDescriptor<T>> bulkDeleteSelector = null) where T : class
{
bulkDeleteSelector = bulkDeleteSelector ?? ((d, o)=>d);
foreach (var descriptor in @objects.Select(o => bulkDeleteSelector(new BulkDeleteDescriptor<T>().Object(o), o)))
this._Operations.Add(descriptor);
return this;
}
/// <summary>
/// DeleteMany, convenience method to delete many objects at once.
/// </summary>
/// <param name="ids">Enumerable of string ids to delete</param>
/// <param name="bulkDeleteSelector">A func called on each ids to describe the individual delete operation</param>
public BulkDescriptor DeleteMany<T>(IEnumerable<string> ids, Func<BulkDeleteDescriptor<T>, string, BulkDeleteDescriptor<T>> bulkDeleteSelector = null) where T : class
{
bulkDeleteSelector = bulkDeleteSelector ?? ((d, s)=> d);
foreach (var descriptor in ids.Select(o => bulkDeleteSelector(new BulkDeleteDescriptor<T>().Id(o), o)))
this._Operations.Add(descriptor);
return this;
}
/// <summary>
/// DeleteMany, convenience method to delete many objects at once.
/// </summary>
/// <param name="ids">Enumerable of int ids to delete</param>
/// <param name="bulkDeleteSelector">A func called on each ids to describe the individual delete operation</param>
public BulkDescriptor DeleteMany<T>(IEnumerable<long> ids, Func<BulkDeleteDescriptor<T>, string, BulkDeleteDescriptor<T>> bulkDeleteSelector = null) where T : class
{
return this.DeleteMany(ids.Select(i=>i.ToString(CultureInfo.InvariantCulture)), bulkDeleteSelector);
}
public BulkDescriptor Update<T>(Func<BulkUpdateDescriptor<T, T>, BulkUpdateDescriptor<T, T>> bulkUpdateSelector) where T : class
{
return this.Update<T, T>(bulkUpdateSelector);
}
public BulkDescriptor Update<T, K>(Func<BulkUpdateDescriptor<T, K>, BulkUpdateDescriptor<T, K>> bulkUpdateSelector)
where T : class
where K : class
{
bulkUpdateSelector.ThrowIfNull("bulkUpdateSelector");
var descriptor = bulkUpdateSelector(new BulkUpdateDescriptor<T, K>());
if (descriptor == null)
return this;
this._Operations.Add(descriptor);
return this;
}
protected override void UpdatePathInfo(IConnectionSettingsValues settings, ElasticsearchPathInfo<BulkRequestParameters> pathInfo)
{
pathInfo.HttpMethod = PathInfoHttpMethod.POST;
}
}
}