Skip to content

Commit dbc98cf

Browse files
committed
fixed filter bool issue where A && B could copy the cache settings for A to B
1 parent 8bbf78b commit dbc98cf

File tree

4 files changed

+152
-69
lines changed

4 files changed

+152
-69
lines changed
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"from": 0,
3+
"size": 10,
4+
"filter": {
5+
"bool": {
6+
"must": [
7+
{
8+
"term": {
9+
"name": "foo",
10+
"_cache": true,
11+
"_name": "first_cache_name",
12+
"_cache_key": "first_cache_key"
13+
}
14+
},
15+
{
16+
"term": {
17+
"name": "bar",
18+
}
19+
}
20+
]
21+
}
22+
}
23+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"from": 0,
3+
"size": 10,
4+
"filter": {
5+
"bool": {
6+
"must": [
7+
{
8+
"exists": {
9+
"field": "name",
10+
"_cache": true,
11+
"_name": "first_cache_name",
12+
"_cache_key": "first_cache_name"
13+
}
14+
},
15+
{
16+
"exists": {
17+
"field": "content"
18+
}
19+
}
20+
]
21+
}
22+
}
23+
}

src/Nest.Tests.Unit/Search/Filter/FilterCalls/FilterCallsTests.cs

Lines changed: 95 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -4,80 +4,106 @@
44
namespace Nest.Tests.Unit.Search.Filter.FilterCalls
55
{
66
[TestFixture]
7-
public class FilterCallsTests : BaseJsonTests
7+
public class FilterCallsTests : BaseJsonTests
88
{
99
[Test]
1010
public void AndFilterCombines()
1111
{
12-
var s = new SearchDescriptor<ElasticSearchProject>()
13-
.From(0)
14-
.Take(10)
15-
.Filter(ff=>
16-
ff.And(af=>
17-
af.Term(f=>f.Name, "foo")
18-
|| af.Term(f => f.Name, "bar")
19-
));
12+
var s = new SearchDescriptor<ElasticSearchProject>()
13+
.From(0)
14+
.Take(10)
15+
.Filter(ff =>
16+
ff.And(af =>
17+
af.Term(f => f.Name, "foo")
18+
|| af.Term(f => f.Name, "bar")
19+
));
20+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
21+
}
22+
[Test]
23+
public void AndFilterMultipleCombines()
24+
{
25+
var s = new SearchDescriptor<ElasticSearchProject>()
26+
.From(0)
27+
.Take(10)
28+
.Filter(ff =>
29+
ff.And(af =>
30+
af.Term(f => f.Name, "foo")
31+
|| af.Term(f => f.Name, "bar")
32+
, af =>
33+
af.Term(f => f.Name, "foo2")
34+
|| af.Term(f => f.Name, "bar2")
35+
));
36+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
37+
}
38+
[Test]
39+
public void OrFilterCombines()
40+
{
41+
var s = new SearchDescriptor<ElasticSearchProject>()
42+
.From(0)
43+
.Take(10)
44+
.Filter(ff =>
45+
ff.Or(of =>
46+
of.Term(f => f.Name, "foo")
47+
&& of.Term(f => f.Name, "bar")
48+
));
49+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
50+
}
51+
[Test]
52+
public void OrFilterMultipleCombines()
53+
{
54+
var s = new SearchDescriptor<ElasticSearchProject>()
55+
.From(0)
56+
.Take(10)
57+
.Filter(ff =>
58+
ff.Or(of =>
59+
of.Term(f => f.Name, "foo")
60+
&& of.Term(f => f.Name, "bar")
61+
, of =>
62+
of.Term(f => f.Name, "foo2")
63+
&& of.Term(f => f.Name, "bar2")
64+
));
65+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
66+
}
67+
68+
[Test]
69+
public void NotFilterCombines()
70+
{
71+
var s = new SearchDescriptor<ElasticSearchProject>()
72+
.From(0)
73+
.Take(10)
74+
.Filter(ff =>
75+
ff.Not(of =>
76+
of.Term(f => f.Name, "foo")
77+
&& of.Term(f => f.Name, "bar")
78+
));
79+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
80+
}
81+
82+
[Test]
83+
public void CacheSettingsDoNotSurviceBoolOp()
84+
{
85+
var s = new SearchDescriptor<ElasticSearchProject>()
86+
.From(0)
87+
.Take(10)
88+
.Filter(ff =>
89+
ff.Name("first_cache_name").Cache(true).CacheKey("first_cache_key").Term(f => f.Name, "foo")
90+
&& ff.Term(f => f.Name, "bar")
91+
);
92+
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
93+
}
94+
95+
[Test]
96+
public void CacheSettingsDoNotSurviceBoolOpNew()
97+
{
98+
var s = new SearchDescriptor<ElasticSearchProject>()
99+
.From(0)
100+
.Take(10)
101+
.Filter(ff =>
102+
ff.Name("first_cache_name").Cache(true).CacheKey("first_cache_key").Exists(f => f.Name)
103+
&& ff.Exists(f => f.Content)
104+
);
20105
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
21106
}
22-
[Test]
23-
public void AndFilterMultipleCombines()
24-
{
25-
var s = new SearchDescriptor<ElasticSearchProject>()
26-
.From(0)
27-
.Take(10)
28-
.Filter(ff =>
29-
ff.And(af =>
30-
af.Term(f => f.Name, "foo")
31-
|| af.Term(f => f.Name, "bar")
32-
, af =>
33-
af.Term(f => f.Name, "foo2")
34-
|| af.Term(f => f.Name, "bar2")
35-
));
36-
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
37-
}
38-
[Test]
39-
public void OrFilterCombines()
40-
{
41-
var s = new SearchDescriptor<ElasticSearchProject>()
42-
.From(0)
43-
.Take(10)
44-
.Filter(ff =>
45-
ff.Or(of =>
46-
of.Term(f => f.Name, "foo")
47-
&& of.Term(f => f.Name, "bar")
48-
));
49-
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
50-
}
51-
[Test]
52-
public void OrFilterMultipleCombines()
53-
{
54-
var s = new SearchDescriptor<ElasticSearchProject>()
55-
.From(0)
56-
.Take(10)
57-
.Filter(ff =>
58-
ff.Or(of =>
59-
of.Term(f => f.Name, "foo")
60-
&& of.Term(f => f.Name, "bar")
61-
, of =>
62-
of.Term(f => f.Name, "foo2")
63-
&& of.Term(f => f.Name, "bar2")
64-
));
65-
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
66-
}
67107

68-
[Test]
69-
public void NotFilterCombines()
70-
{
71-
var s = new SearchDescriptor<ElasticSearchProject>()
72-
.From(0)
73-
.Take(10)
74-
.Filter(ff =>
75-
ff.Not(of =>
76-
of.Term(f => f.Name, "foo")
77-
&& of.Term(f => f.Name, "bar")
78-
));
79-
this.JsonEquals(s, System.Reflection.MethodInfo.GetCurrentMethod());
80-
}
81-
82-
}
108+
}
83109
}

src/Nest/DSL/FilterDescriptor.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,18 @@ internal FilterDescriptor<T> New(Action<FilterDescriptor<T>> fillProperty)
158158

159159
if (fillProperty != null)
160160
fillProperty(f);
161+
162+
this.ResetCache();
161163
return f;
162164
}
163165

166+
private void ResetCache()
167+
{
168+
this._Cache = null;
169+
this._CacheKey = null;
170+
this._Name = null;
171+
}
172+
164173
private void SetCacheAndName(FilterBase filter)
165174
{
166175
if (this._Cache.HasValue)
@@ -189,6 +198,8 @@ Action<Dictionary<string, object>, FilterDescriptor<T>> setter
189198
if (!string.IsNullOrWhiteSpace(this._CacheKey))
190199
dictionary.Add("_cache_key", this._CacheKey);
191200

201+
this.ResetCache();
202+
192203
var bucket = this.New(null);
193204
setter(dictionary, bucket);
194205

0 commit comments

Comments
 (0)