1
- using System ;
2
- using System . Collections ;
1
+ using Lucene . Net . Analysis . Standard ;
3
2
using Lucene . Net . Index ;
3
+ using Lucene . Net . QueryParsers ;
4
4
using Lucene . Net . Search ;
5
5
using NUnit . Framework ;
6
+ using System ;
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,105 +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
+ }
41
51
}
42
52
43
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
+ }
102
+ }
103
+
104
+ [ Test ]
105
+ [ Ignore ( "Need to implement BestDriversFilter" ) ]
44
106
public void CombinedFilters ( )
45
107
{
46
- CreateData ( ) ;
47
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
48
- s . Transaction . Begin ( ) ;
49
- BooleanQuery query = new BooleanQuery ( ) ;
50
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
51
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
52
- query . Add ( new TermQuery ( new Term ( "teacher" , "aaron" ) ) , BooleanClause . Occur . SHOULD ) ;
53
-
54
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
55
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
56
- ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "Login" , "andre" ) ;
57
- Assert . AreEqual ( 1 , ftQuery . ResultSize , "Should filter to limit to Emmanuel" ) ;
58
-
59
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
60
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
61
- ftQuery . EnableFullTextFilter ( "security" ) . SetParameter ( "login" , "andre" ) ;
62
- ftQuery . DisableFullTextFilter ( "security" ) ;
63
- ftQuery . DisableFullTextFilter ( "bestDriver" ) ;
64
- 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 ) ;
65
117
66
- s . Transaction . Commit ( ) ;
67
- s . Close ( ) ;
68
- 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
+ }
69
137
}
70
138
71
139
[ Test ]
140
+ [ Ignore ( "Need to implement ExcludeAllFilter" ) ]
72
141
public void Cache ( )
73
142
{
74
- CreateData ( ) ;
75
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
76
- s . Transaction . Begin ( ) ;
77
- BooleanQuery query = new BooleanQuery ( ) ;
78
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
79
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
80
- 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 ) ;
81
152
82
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
83
- 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" ) ;
84
155
85
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
86
- ftQuery . EnableFullTextFilter ( "cachetest" ) ;
87
- 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 ( ) ;
88
173
89
- ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
90
- ftQuery . EnableFullTextFilter ( "cachetest" ) ;
91
- try
92
- {
93
- int i = ftQuery . ResultSize ;
94
174
}
95
- catch ( NotSupportedException )
175
+ finally
96
176
{
97
- Assert . Fail ( "Cache does not work" ) ;
177
+ DeleteData ( ) ;
98
178
}
99
-
100
- s . Transaction . Commit ( ) ;
101
- s . Close ( ) ;
102
- DeleteData ( ) ;
103
179
}
104
180
105
181
[ Test ]
182
+ [ Ignore ( "Need to implement BestDriversFilter" ) ]
106
183
public void StraightFilters ( )
107
184
{
108
- CreateData ( ) ;
109
- IFullTextSession s = Search . CreateFullTextSession ( OpenSession ( ) ) ;
110
- s . Transaction . Begin ( ) ;
111
- BooleanQuery query = new BooleanQuery ( ) ;
112
- query . Add ( new TermQuery ( new Term ( "teacher" , "andre" ) ) , BooleanClause . Occur . SHOULD ) ;
113
- query . Add ( new TermQuery ( new Term ( "teacher" , "max" ) ) , BooleanClause . Occur . SHOULD ) ;
114
- 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 ) ;
115
194
116
- IFullTextQuery ftQuery = s . CreateFullTextQuery ( query , typeof ( Driver ) ) ;
117
- ftQuery . EnableFullTextFilter ( "bestDriver" ) ;
118
- Lucene . Net . Search . Filter dateFilter = new RangeFilter ( "delivery" , "2001" , "2005" , true , true ) ;
119
- ftQuery . SetFilter ( dateFilter ) ;
120
- 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" ) ;
121
200
122
- s . Transaction . Commit ( ) ;
123
- s . Close ( ) ;
124
- DeleteData ( ) ;
201
+ s . Transaction . Commit ( ) ;
202
+ s . Close ( ) ;
203
+ }
204
+ finally
205
+ {
206
+ DeleteData ( ) ;
207
+ }
125
208
}
126
209
127
210
#endregion
@@ -168,6 +251,20 @@ private void CreateData()
168
251
s . Transaction . Commit ( ) ;
169
252
s . Close ( ) ;
170
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
+
171
268
#endregion
172
269
}
173
270
}
0 commit comments