Skip to content

Commit c0f9210

Browse files
author
Christoph Büscher
committed
Add tests with aliases to rank-eval
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. Relates to #29011
1 parent 067fbb8 commit c0f9210

File tree

2 files changed

+77
-68
lines changed

2 files changed

+77
-68
lines changed

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

Lines changed: 33 additions & 22 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,9 +41,14 @@
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 {
48+
49+
private static final String TEST_INDEX = "test";
50+
private static final String INDEX_ALIAS = "alias0";
51+
4652
@Override
4753
protected Collection<Class<? extends Plugin>> transportClientPlugins() {
4854
return Arrays.asList(RankEvalPlugin.class);
@@ -55,20 +61,23 @@ protected Collection<Class<? extends Plugin>> nodePlugins() {
5561

5662
@Before
5763
public void setup() {
58-
createIndex("test");
64+
createIndex(TEST_INDEX);
5965
ensureGreen();
6066

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

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

7483
/**
@@ -98,7 +107,9 @@ public void testPrecisionAtRequest() {
98107
RankEvalAction.INSTANCE, new RankEvalRequest());
99108
builder.setRankEvalSpec(task);
100109

101-
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request().indices("test"))
110+
// String indexToUse = randomBoolean() ? TEST_INDEX : INDEX_ALIAS;
111+
String indexToUse = INDEX_ALIAS;
112+
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request().indices(indexToUse))
102113
.actionGet();
103114
// the expected Prec@ for the first query is 4/6 and the expected Prec@ for the
104115
// second is 1/6, divided by 2 to get the average
@@ -140,7 +151,7 @@ public void testPrecisionAtRequest() {
140151
metric = new PrecisionAtK(1, false, 3);
141152
task = new RankEvalSpec(specifications, metric);
142153

143-
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 }));
144155

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

161172
List<RatedRequest> specifications = new ArrayList<>();
162173
List<RatedDocument> ratedDocs = Arrays.asList(
163-
new RatedDocument("test", "1", 3),
164-
new RatedDocument("test", "2", 2),
165-
new RatedDocument("test", "3", 3),
166-
new RatedDocument("test", "4", 0),
167-
new RatedDocument("test", "5", 1),
168-
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));
169180
specifications.add(new RatedRequest("amsterdam_query", ratedDocs, testQuery));
170181

171182
DiscountedCumulativeGain metric = new DiscountedCumulativeGain(false, null, 10);
172183
RankEvalSpec task = new RankEvalSpec(specifications, metric);
173184

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

177188
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
178189
assertEquals(DiscountedCumulativeGainTests.EXPECTED_DCG, response.getEvaluationResult(), 10E-14);
@@ -181,7 +192,7 @@ public void testDCGRequest() {
181192
metric = new DiscountedCumulativeGain(false, null, 3);
182193
task = new RankEvalSpec(specifications, metric);
183194

184-
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 }));
185196

186197
response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
187198
assertEquals(12.39278926071437, response.getEvaluationResult(), 10E-14);
@@ -200,7 +211,7 @@ public void testMRRRequest() {
200211
RankEvalSpec task = new RankEvalSpec(specifications, metric);
201212

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

205216
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
206217
// the expected reciprocal rank for the amsterdam_query is 1/5
@@ -213,7 +224,7 @@ public void testMRRRequest() {
213224
metric = new MeanReciprocalRank(1, 3);
214225
task = new RankEvalSpec(specifications, metric);
215226

216-
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 }));
217228

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

246257
RankEvalRequestBuilder builder = new RankEvalRequestBuilder(client(), RankEvalAction.INSTANCE,
247-
new RankEvalRequest(task, new String[] { "test" }));
258+
new RankEvalRequest(task, new String[] { TEST_INDEX }));
248259
builder.setRankEvalSpec(task);
249260

250261
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, builder.request()).actionGet();
@@ -264,7 +275,7 @@ public void testIndicesOptions() {
264275
specifications.add(new RatedRequest("amsterdam_query", relevantDocs, amsterdamQuery));
265276
RankEvalSpec task = new RankEvalSpec(specifications, new PrecisionAtK());
266277

267-
RankEvalRequest request = new RankEvalRequest(task, new String[] { "test", "test2" });
278+
RankEvalRequest request = new RankEvalRequest(task, new String[] { TEST_INDEX, "test2" });
268279
request.setRankEvalSpec(task);
269280

270281
RankEvalResponse response = client().execute(RankEvalAction.INSTANCE, request).actionGet();
@@ -322,7 +333,7 @@ public void testIndicesOptions() {
322333
private static List<RatedDocument> createRelevant(String... docs) {
323334
List<RatedDocument> relevant = new ArrayList<>();
324335
for (String doc : docs) {
325-
relevant.add(new RatedDocument("test", doc, TestRatingEnum.RELEVANT.ordinal()));
336+
relevant.add(new RatedDocument(TEST_INDEX, doc, TestRatingEnum.RELEVANT.ordinal()));
326337
}
327338
return relevant;
328339
}

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

Lines changed: 44 additions & 46 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: response format was updated in 6.3
7-
1+
setup:
82
- do:
93
indices.create:
104
index: foo
@@ -43,8 +37,21 @@
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:
54+
index: foo,
4855
body: {
4956
"requests" : [
5057
{
@@ -84,52 +91,43 @@
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":
91-
92-
- skip:
93-
version: " - 6.2.99"
94-
reason: response format was updated in 6.3
97+
"Alias resolution":
9598

9699
- 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" }
100+
rank_eval:
101+
index: alias
102+
body: {
103+
"requests" : [
104+
{
105+
"id": "amsterdam_query",
106+
"request": { "query": { "match" : {"text" : "amsterdam" }}},
107+
"ratings": [
108+
{"_index": "foo", "_id": "doc1", "rating": 0},
109+
{"_index": "foo", "_id": "doc2", "rating": 1},
110+
{"_index": "foo", "_id": "doc3", "rating": 1}]
111+
},
112+
{
113+
"id" : "berlin_query",
114+
"request": { "query": { "match" : { "text" : "berlin" } }, "size" : 10 },
115+
"ratings": [{"_index": "foo", "_id": "doc1", "rating": 1}]
116+
}
117+
],
118+
"metric" : { "precision": { "ignore_unlabeled" : true }}
119+
}
109120

110-
- do:
111-
index:
112-
index: foo
113-
type: bar
114-
id: doc2
115-
body: { "text": "amsterdam" }
121+
- match: { quality_level: 1}
122+
- match: { details.amsterdam_query.quality_level: 1.0}
123+
- match: { details.berlin_query.quality_level: 1.0}
116124

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" }
125+
---
126+
"Mean Reciprocal Rank":
130127

131-
- do:
132-
indices.refresh: {}
128+
- skip:
129+
version: " - 6.2.99"
130+
reason: response format was updated in 6.3
133131

134132
- do:
135133
rank_eval:

0 commit comments

Comments
 (0)