Skip to content

Commit ee403aa

Browse files
author
Christoph Büscher
committed
Add tests for ranking evaluation with aliases (#29452)
The ranking evaluation requests so far were not tested against aliases but they should run regardless of the targeted index is a real index or an alias. This change adds cases for this to the integration and rest tests.
1 parent 2e479ac commit ee403aa

File tree

2 files changed

+75
-65
lines changed

2 files changed

+75
-65
lines changed

modules/rank-eval/src/test/java/org/elasticsearch/index/rankeval/RankEvalRequestIT.java

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.elasticsearch.index.rankeval;
2121

2222
import org.elasticsearch.ElasticsearchException;
23+
import org.elasticsearch.action.admin.indices.alias.IndicesAliasesRequest.AliasActions;
2324
import org.elasticsearch.action.search.SearchRequest;
2425
import org.elasticsearch.action.support.IndicesOptions;
2526
import org.elasticsearch.index.IndexNotFoundException;
@@ -40,10 +41,13 @@
4041
import java.util.Set;
4142

4243
import static org.elasticsearch.index.rankeval.EvaluationMetric.filterUnknownDocuments;
44+
import static org.elasticsearch.test.hamcrest.ElasticsearchAssertions.assertAcked;
4345
import static org.hamcrest.Matchers.instanceOf;
4446

4547
public class RankEvalRequestIT extends ESIntegTestCase {
4648

49+
private static final String TEST_INDEX = "test";
50+
private static final String INDEX_ALIAS = "alias0";
4751
private static final int RELEVANT_RATING_1 = 1;
4852

4953
@Override
@@ -58,20 +62,23 @@ protected Collection<Class<? extends Plugin>> nodePlugins() {
5862

5963
@Before
6064
public void setup() {
61-
createIndex("test");
65+
createIndex(TEST_INDEX);
6266
ensureGreen();
6367

64-
client().prepareIndex("test", "testtype").setId("1")
68+
client().prepareIndex(TEST_INDEX, "testtype").setId("1")
6569
.setSource("text", "berlin", "title", "Berlin, Germany", "population", 3670622).get();
66-
client().prepareIndex("test", "testtype").setId("2").setSource("text", "amsterdam", "population", 851573).get();
67-
client().prepareIndex("test", "testtype").setId("3").setSource("text", "amsterdam", "population", 851573).get();
68-
client().prepareIndex("test", "testtype").setId("4").setSource("text", "amsterdam", "population", 851573).get();
69-
client().prepareIndex("test", "testtype").setId("5").setSource("text", "amsterdam", "population", 851573).get();
70-
client().prepareIndex("test", "testtype").setId("6").setSource("text", "amsterdam", "population", 851573).get();
70+
client().prepareIndex(TEST_INDEX, "testtype").setId("2").setSource("text", "amsterdam", "population", 851573).get();
71+
client().prepareIndex(TEST_INDEX, "testtype").setId("3").setSource("text", "amsterdam", "population", 851573).get();
72+
client().prepareIndex(TEST_INDEX, "testtype").setId("4").setSource("text", "amsterdam", "population", 851573).get();
73+
client().prepareIndex(TEST_INDEX, "testtype").setId("5").setSource("text", "amsterdam", "population", 851573).get();
74+
client().prepareIndex(TEST_INDEX, "testtype").setId("6").setSource("text", "amsterdam", "population", 851573).get();
7175

7276
// add another index for testing closed indices etc...
7377
client().prepareIndex("test2", "testtype").setId("7").setSource("text", "amsterdam", "population", 851573).get();
7478
refresh();
79+
80+
// set up an alias that can also be used in tests
81+
assertAcked(client().admin().indices().prepareAliases().addAliasAction(AliasActions.add().index(TEST_INDEX).alias(INDEX_ALIAS)));
7582
}
7683

7784
/**
@@ -101,7 +108,8 @@ public void testPrecisionAtRequest() {
101108
RankEvalAction.INSTANCE, new RankEvalRequest());
102109
builder.setRankEvalSpec(task);
103110

104-
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request().indices("test"))
111+
String indexToUse = randomBoolean() ? TEST_INDEX : INDEX_ALIAS;
112+
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request().indices(indexToUse))
105113
.actionGet();
106114
// the expected Prec@ for the first query is 4/6 and the expected Prec@ for the
107115
// second is 1/6, divided by 2 to get the average
@@ -143,7 +151,7 @@ public void testPrecisionAtRequest() {
143151
metric = new PrecisionAtK(1, false, 3);
144152
task = new RankEvalSpec(specifications, metric);
145153

146-
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { "test" }));
154+
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { TEST_INDEX }));
147155

148156
response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
149157
// if we look only at top 3 documente, the expected P@3 for the first query is
@@ -163,19 +171,19 @@ public void testDCGRequest() {
163171

164172
List<RatedRequest> specifications = new ArrayList<>();
165173
List<RatedDocument> ratedDocs = Arrays.asList(
166-
new RatedDocument("test", "1", 3),
167-
new RatedDocument("test", "2", 2),
168-
new RatedDocument("test", "3", 3),
169-
new RatedDocument("test", "4", 0),
170-
new RatedDocument("test", "5", 1),
171-
new RatedDocument("test", "6", 2));
174+
new RatedDocument(TEST_INDEX, "1", 3),
175+
new RatedDocument(TEST_INDEX, "2", 2),
176+
new RatedDocument(TEST_INDEX, "3", 3),
177+
new RatedDocument(TEST_INDEX, "4", 0),
178+
new RatedDocument(TEST_INDEX, "5", 1),
179+
new RatedDocument(TEST_INDEX, "6", 2));
172180
specifications.add(new RatedRequest("amsterdam_query", ratedDocs, testQuery));
173181

174182
DiscountedCumulativeGain metric = new DiscountedCumulativeGain(false, null, 10);
175183
RankEvalSpec task = new RankEvalSpec(specifications, metric);
176184

177185
RankEvalRequestBuilder builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE,
178-
new RankEvalRequest(task, new String[] { "test" }));
186+
new RankEvalRequest(task, new String[] { TEST_INDEX }));
179187

180188
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
181189
assertEquals(DiscountedCumulativeGainTests.EXPECTED_DCG, response.getEvaluationResult(), 10E-14);
@@ -184,7 +192,7 @@ public void testDCGRequest() {
184192
metric = new DiscountedCumulativeGain(false, null, 3);
185193
task = new RankEvalSpec(specifications, metric);
186194

187-
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { "test" }));
195+
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { TEST_INDEX }));
188196

189197
response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
190198
assertEquals(12.39278926071437, response.getEvaluationResult(), 10E-14);
@@ -203,7 +211,7 @@ public void testMRRRequest() {
203211
RankEvalSpec task = new RankEvalSpec(specifications, metric);
204212

205213
RankEvalRequestBuilder builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE,
206-
new RankEvalRequest(task, new String[] { "test" }));
214+
new RankEvalRequest(task, new String[] { TEST_INDEX }));
207215

208216
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
209217
// the expected reciprocal rank for the amsterdam_query is 1/5
@@ -216,7 +224,7 @@ public void testMRRRequest() {
216224
metric = new MeanReciprocalRank(1, 3);
217225
task = new RankEvalSpec(specifications, metric);
218226

219-
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { "test" }));
227+
builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE, new RankEvalRequest(task, new String[] { TEST_INDEX }));
220228

221229
response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
222230
// limiting to top 3 results, the amsterdam_query has no relevant document in it
@@ -247,7 +255,7 @@ public void testBadQuery() {
247255
RankEvalSpec task = new RankEvalSpec(specifications, new PrecisionAtK());
248256

249257
RankEvalRequestBuilder builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE,
250-
new RankEvalRequest(task, new String[] { "test" }));
258+
new RankEvalRequest(task, new String[] { TEST_INDEX }));
251259
builder.setRankEvalSpec(task);
252260

253261
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
@@ -267,7 +275,7 @@ public void testIndicesOptions() {
267275
specifications.add(new RatedRequest("amsterdam_query", relevantDocs, amsterdamQuery));
268276
RankEvalSpec task = new RankEvalSpec(specifications, new PrecisionAtK());
269277

270-
RankEvalRequest request = new RankEvalRequest(task, new String[] { "test", "test2" });
278+
RankEvalRequest request = new RankEvalRequest(task, new String[] { TEST_INDEX, "test2" });
271279
request.setRankEvalSpec(task);
272280

273281
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, request).actionGet();

modules/rank-eval/src/test/resources/rest-api-spec/test/rank_eval/10_basic.yml

Lines changed: 46 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
---
2-
"Response format":
3-
4-
- skip:
5-
version: " - 6.2.99"
6-
reason: changes in response format changed in 6.3
7-
1+
setup:
82
- do:
93
indices.create:
104
index: foo
@@ -43,9 +37,22 @@
4337
- do:
4438
indices.refresh: {}
4539

40+
- do:
41+
indices.put_alias:
42+
index: foo
43+
name: alias
44+
45+
---
46+
"Response format":
47+
48+
- skip:
49+
version: " - 6.2.99"
50+
reason: response format was updated in 6.3
51+
4652
- do:
4753
rank_eval:
48-
body: {
54+
index: foo,
55+
body: {
4956
"requests" : [
5057
{
5158
"id": "amsterdam_query",
@@ -84,52 +91,47 @@
8491
- match: { details.berlin_query.hits.0.hit._id: "doc1" }
8592
- match: { details.berlin_query.hits.0.rating: 1}
8693
- match: { details.berlin_query.hits.1.hit._id: "doc4" }
87-
- is_false: details.berlin_query.hits.1.rating
94+
- is_false: details.berlin_query.hits.1.rating
8895

8996
---
90-
"Mean Reciprocal Rank":
97+
"Alias resolution":
9198

9299
- skip:
93100
version: " - 6.2.99"
94-
reason: changes in response format in 6.3
101+
reason: response format was updated in 6.3
95102

96103
- do:
97-
indices.create:
98-
index: foo
99-
body:
100-
settings:
101-
index:
102-
number_of_shards: 1
103-
- do:
104-
index:
105-
index: foo
106-
type: bar
107-
id: doc1
108-
body: { "text": "berlin" }
104+
rank_eval:
105+
index: alias
106+
body: {
107+
"requests" : [
108+
{
109+
"id": "amsterdam_query",
110+
"request": { "query": { "match" : {"text" : "amsterdam" }}},
111+
"ratings": [
112+
{"_index": "foo", "_id": "doc1", "rating": 0},
113+
{"_index": "foo", "_id": "doc2", "rating": 1},
114+
{"_index": "foo", "_id": "doc3", "rating": 1}]
115+
},
116+
{
117+
"id" : "berlin_query",
118+
"request": { "query": { "match" : { "text" : "berlin" } }, "size" : 10 },
119+
"ratings": [{"_index": "foo", "_id": "doc1", "rating": 1}]
120+
}
121+
],
122+
"metric" : { "precision": { "ignore_unlabeled" : true }}
123+
}
109124

110-
- do:
111-
index:
112-
index: foo
113-
type: bar
114-
id: doc2
115-
body: { "text": "amsterdam" }
125+
- match: { quality_level: 1}
126+
- match: { details.amsterdam_query.quality_level: 1.0}
127+
- match: { details.berlin_query.quality_level: 1.0}
116128

117-
- do:
118-
index:
119-
index: foo
120-
type: bar
121-
id: doc3
122-
body: { "text": "amsterdam" }
123-
124-
- do:
125-
index:
126-
index: foo
127-
type: bar
128-
id: doc4
129-
body: { "text": "something about amsterdam and berlin" }
129+
---
130+
"Mean Reciprocal Rank":
130131

131-
- do:
132-
indices.refresh: {}
132+
- skip:
133+
version: " - 6.2.99"
134+
reason: response format was updated in 6.3
133135

134136
- do:
135137
rank_eval:

0 commit comments

Comments
 (0)