1
+ using Lucene . Net . Analysis . Standard ;
1
2
using Lucene . Net . Index ;
3
+ using Lucene . Net . QueryParsers ;
2
4
using Lucene . Net . Search ;
3
5
using NUnit . Framework ;
4
6
using System ;
5
7
using System . Collections ;
8
+ using System . Linq ;
9
+ using Version = Lucene . Net . Util . Version ;
6
10
7
11
namespace NHibernate . Search . Tests . Filter
8
12
{
@@ -23,108 +27,184 @@ protected override IList Mappings
23
27
[ Test ]
24
28
public void ParameterizedFilter ( )
25
29
{
26
- CreateData ( ) ;
27
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
28
- s . Transaction . Begin ( ) ;
29
- BooleanQuery query = new BooleanQuery ( ) ;
30
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
31
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
32
- query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
30
+ try
31
+ {
32
+ CreateData ( ) ;
33
+ IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
34
+ s . Transaction . Begin ( ) ;
35
+ BooleanQuery query = new BooleanQuery ( ) ;
36
+ query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
37
+ query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
38
+ query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
33
39
34
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
35
- ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , "andre" ) ;
36
- Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should filter to limit to Emmanuel" ) ;
40
+ IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
41
+ ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , "andre" ) ;
42
+ Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should filter to limit to Emmanuel" ) ;
37
43
38
- s . Transaction . Commit ( ) ;
39
- s . Close ( ) ;
40
- DeleteData ( ) ;
44
+ s . Transaction . Commit ( ) ;
45
+ s . Close ( ) ;
46
+ }
47
+ finally
48
+ {
49
+ DeleteData ( ) ;
50
+ }
51
+ }
52
+
53
+ [ Test ]
54
+ public void ParameterizedFilterWithSearchQuery ( )
55
+ {
56
+ try
57
+ {
58
+ const string n = "NoMatch" ;
59
+ const string y = "Match" ;
60
+
61
+ using ( var session = OpenSession ( ) )
62
+ {
63
+ session . Transaction . Begin ( ) ;
64
+
65
+ var deliveryDate = new DateTime ( 2000 , 1 , 1 ) ;
66
+ saveNewDriver ( session , 1 , n , n , deliveryDate , - 1 ) ;
67
+ saveNewDriver ( session , 2 , y , y , deliveryDate , - 1 ) ;
68
+ saveNewDriver ( session , 3 , y , y , deliveryDate , - 1 ) ;
69
+ saveNewDriver ( session , 4 , n , n , deliveryDate , - 1 ) ;
70
+ saveNewDriver ( session , 5 , y , y , deliveryDate , - 1 ) ;
71
+ saveNewDriver ( session , 6 , n , y , deliveryDate , - 1 ) ;
72
+ saveNewDriver ( session , 7 , n , n , deliveryDate , - 1 ) ;
73
+ saveNewDriver ( session , 8 , y , n , deliveryDate , - 1 ) ;
74
+ saveNewDriver ( session , 9 , y , y , deliveryDate , - 1 ) ;
75
+ saveNewDriver ( session , 10 , n , n , deliveryDate , - 1 ) ;
76
+ saveNewDriver ( session , 11 , y , y , deliveryDate , - 1 ) ;
77
+ saveNewDriver ( session , 12 , n , n , deliveryDate , - 1 ) ;
78
+ saveNewDriver ( session , 13 , n , n , deliveryDate , - 1 ) ;
79
+ saveNewDriver ( session , 14 , n , y , deliveryDate , - 1 ) ;
80
+ saveNewDriver ( session , 15 , y , n , deliveryDate , - 1 ) ;
81
+ session . Transaction . Commit ( ) ;
82
+ }
83
+
84
+ using ( var session = OpenSession ( ) )
85
+ using ( var ftSession = Search . CreateFullTextSession ( session ) )
86
+ {
87
+ var parser = new QueryParser ( Version . LUCENE_29 , "name" , new StandardAnalyzer ( Version . LUCENE_29 ) ) ;
88
+ var query = parser . Parse ( "name:" + y ) ;
89
+ var ftQuery = ftSession . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
90
+ ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , y ) ;
91
+ var results = ftQuery . List ( ) ;
92
+
93
+ var expectedIds = new [ ] { 2 , 3 , 5 , 9 , 11 } ;
94
+ var actualIds = results . Cast < Driver > ( ) . OrderBy ( x => x . Id ) . Select ( x => x . Id ) ;
95
+ Assert . AreEqual ( expectedIds , actualIds , "The query should return only drivers where name AND teacher match." ) ;
96
+ }
97
+ }
98
+ finally
99
+ {
100
+ DeleteData ( ) ;
101
+ }
41
102
}
42
103
43
104
[ Test ]
44
105
[ Ignore ( "Need to implement BestDriversFilter" ) ]
45
106
public void CombinedFilters ( )
46
107
{
47
- CreateData ( ) ;
48
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
49
- s . Transaction . Begin ( ) ;
50
- BooleanQuery query = new BooleanQuery ( ) ;
51
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
52
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
53
- query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
54
-
55
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
56
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
57
- ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , "andre" ) ;
58
- Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should filter to limit to Emmanuel" ) ;
59
-
60
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
61
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
62
- ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "login" , "andre" ) ;
63
- ftQuery . DisableFullTextFilter ( "security" ) ;
64
- ftQuery . DisableFullTextFilter ( "bestDriver" ) ;
65
- Assert . AreEqual ( 3 , ftQuery . ResultSize , "Should not filter anymore" ) ;
108
+ try
109
+ {
110
+ CreateData ( ) ;
111
+ IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
112
+ s . Transaction . Begin ( ) ;
113
+ BooleanQuery query = new BooleanQuery ( ) ;
114
+ query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
115
+ query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
116
+ query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
66
117
67
- s . Transaction . Commit ( ) ;
68
- s . Close ( ) ;
69
- DeleteData ( ) ;
118
+ IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
119
+ ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
120
+ ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , "andre" ) ;
121
+ Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should filter to limit to Emmanuel" ) ;
122
+
123
+ ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
124
+ ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
125
+ ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "login" , "andre" ) ;
126
+ ftQuery . DisableFullTextFilter ( "security" ) ;
127
+ ftQuery . DisableFullTextFilter ( "bestDriver" ) ;
128
+ Assert . AreEqual ( 3 , ftQuery . ResultSize , "Should not filter anymore" ) ;
129
+
130
+ s . Transaction . Commit ( ) ;
131
+ s . Close ( ) ;
132
+ }
133
+ finally
134
+ {
135
+ DeleteData ( ) ;
136
+ }
70
137
}
71
138
72
139
[ Test ]
73
140
[ Ignore ( "Need to implement ExcludeAllFilter" ) ]
74
141
public void Cache ( )
75
142
{
76
- CreateData ( ) ;
77
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
78
- s . Transaction . Begin ( ) ;
79
- BooleanQuery query = new BooleanQuery ( ) ;
80
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
81
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
82
- query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
143
+ try
144
+ {
145
+ CreateData ( ) ;
146
+ IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
147
+ s . Transaction . Begin ( ) ;
148
+ BooleanQuery query = new BooleanQuery ( ) ;
149
+ query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
150
+ query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
151
+ query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
83
152
84
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
85
- Assert . AreEqual ( 3 , ftQuery . ResultSize , "No filter should happen" ) ;
153
+ IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
154
+ Assert . AreEqual ( 3 , ftQuery . ResultSize , "No filter should happen" ) ;
86
155
87
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
88
- ftQuery . EnableFullTextFilter ( "cachetest" ) ;
89
- Assert . AreEqual ( 0 , ftQuery . ResultSize , "Should filter out all" ) ;
156
+ ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
157
+ ftQuery . EnableFullTextFilter ( "cachetest" ) ;
158
+ Assert . AreEqual ( 0 , ftQuery . ResultSize , "Should filter out all" ) ;
159
+
160
+ ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
161
+ ftQuery . EnableFullTextFilter ( "cachetest" ) ;
162
+ try
163
+ {
164
+ int i = ftQuery . ResultSize ;
165
+ }
166
+ catch ( NotSupportedException )
167
+ {
168
+ Assert . Fail ( "Cache does not work" ) ;
169
+ }
170
+
171
+ s . Transaction . Commit ( ) ;
172
+ s . Close ( ) ;
90
173
91
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
92
- ftQuery . EnableFullTextFilter ( "cachetest" ) ;
93
- try
94
- {
95
- int i = ftQuery . ResultSize ;
96
174
}
97
- catch ( NotSupportedException )
175
+ finally
98
176
{
99
- Assert . Fail ( "Cache does not work" ) ;
177
+ DeleteData ( ) ;
100
178
}
101
-
102
- s . Transaction . Commit ( ) ;
103
- s . Close ( ) ;
104
- DeleteData ( ) ;
105
179
}
106
180
107
181
[ Test ]
108
182
[ Ignore ( "Need to implement BestDriversFilter" ) ]
109
183
public void StraightFilters ( )
110
184
{
111
- CreateData ( ) ;
112
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
113
- s . Transaction . Begin ( ) ;
114
- BooleanQuery query = new BooleanQuery ( ) ;
115
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
116
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
117
- query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
185
+ try
186
+ {
187
+ CreateData ( ) ;
188
+ IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
189
+ s . Transaction . Begin ( ) ;
190
+ BooleanQuery query = new BooleanQuery ( ) ;
191
+ query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
192
+ query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
193
+ query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
118
194
119
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
120
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
121
- Lucene . Net . Search . Filter dateFilter = new RangeFilter ( "delivery" , "2001" , "2005" , true , true ) ;
122
- ftQuery . SetFilter ( dateFilter ) ;
123
- Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should select only liz" ) ;
195
+ IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
196
+ ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
197
+ Lucene . Net . Search . Filter dateFilter = new RangeFilter ( "delivery" , "2001" , "2005" , true , true ) ;
198
+ ftQuery . SetFilter ( dateFilter ) ;
199
+ Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should select only liz" ) ;
124
200
125
- s . Transaction . Commit ( ) ;
126
- s . Close ( ) ;
127
- DeleteData ( ) ;
201
+ s . Transaction . Commit ( ) ;
202
+ s . Close ( ) ;
203
+ }
204
+ finally
205
+ {
206
+ DeleteData ( ) ;
207
+ }
128
208
}
129
209
130
210
#endregion
@@ -171,6 +251,20 @@ private void CreateData()
171
251
s . Transaction . Commit ( ) ;
172
252
s . Close ( ) ;
173
253
}
254
+
255
+ private static void saveNewDriver ( ISession session , int id , string name , string teacher , DateTime delivery , int score )
256
+ {
257
+ var driver = new Driver
258
+ {
259
+ Id = id ,
260
+ Name = name ,
261
+ Teacher = teacher ,
262
+ Delivery = delivery ,
263
+ Score = score
264
+ } ;
265
+ session . Save ( driver ) ;
266
+ }
267
+
174
268
#endregion
175
269
}
176
270
}
0 commit comments