This repository has been archived by the owner on Jul 18, 2018. It is now read-only.
/
ElasticQuery.cs
136 lines (114 loc) · 3.1 KB
/
ElasticQuery.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
135
136
using System.Collections.Generic;
using System.ComponentModel;
using Newtonsoft.Json;
namespace ElasticSearch.Client.QueryDSL
{
/// <summary>
/// a queryDSL wrapper
/// </summary>
[JsonConverter(typeof(ElasticQueryConverterer))]
public class ElasticQuery
{
public ElasticQuery(int from, int size, bool explatin = false)
{
From = from;
Size = size;
Explain = explatin;
}
public ElasticQuery(IQuery query, SortItem sortItem, int from, int size)
{
Query = query;
SortItems = new List<SortItem>() { sortItem };
From = from;
Size = size;
}
[DefaultValue(0)]
public int From { get; private set; }
[DefaultValue(10)]
public int Size { get; private set; }
[DefaultValue(false)]
public bool Explain { set; get; }
public List<string> Fields;
public List<SortItem> SortItems;
public IQuery Query;
public IFacet Facets;
public ElasticQuery SetQuery(IQuery query)
{
Query = query;
return this;
}
public ElasticQuery SetSortItems(List<SortItem> sortItems)
{
SortItems = sortItems;
return this;
}
public ElasticQuery AddField(string field)
{
if (Fields == null) { Fields = new List<string>(); }
Fields.Add(field);
return this;
}
public ElasticQuery AddSortItem(SortItem sortItem)
{
if (SortItems == null) { SortItems = new List<SortItem>(); }
SortItems.Add(sortItem);
return this;
}
public ElasticQuery AddSortItem(string field, SortType type = SortType.Desc)
{
if (SortItems == null) { SortItems = new List<SortItem>(); }
SortItems.Add(new SortItem(field, type));
return this;
}
public void SetFacets()
{
}
public ElasticQuery SetFacets(IFacet facet)
{
Facets = facet;
return this;
}
public ElasticQuery AddFields(string[] fields)
{
if (Fields == null) { Fields = new List<string>(); }
Fields.AddRange(fields);
return this;
}
}
public interface IFacet
{
}
[JsonConverter(typeof(TermsFacetConverterer))]
public class TermsFacet : IFacet
{
internal List<TermsFacetItem> facetItems;
public TermsFacet(string facetName, string field, int size = 10)
{
facetItems = new List<TermsFacetItem>();
var item = new TermsFacetItem();
item.FacetName = facetName;
item.Field = field;
item.Size = size;
facetItems.Add(item);
}
public TermsFacet AddTermFacet(string facetName, string field, int size = 10)
{
var item = new TermsFacetItem();
item.FacetName = facetName;
item.Field = field;
item.Size = size;
facetItems.Add(item);
return this;
}
public class TermsFacetItem
{
public string Field;
public int Size;
public string FacetName { get; set; }
}
}
public class Filter
{
public IQuery Query;
}
}