Elasticsearch plugin providing comprehensive ranking evaluation capabilities for search quality assessment.
npx @tessl/cli install tessl/maven-org-elasticsearch-plugin--rank-eval-client@7.17.0The Elasticsearch Rank Eval plugin provides comprehensive ranking evaluation capabilities for search quality assessment. It implements multiple information retrieval metrics including Precision@K, Recall@K, Mean Reciprocal Rank (MRR), Discounted Cumulative Gain (DCG), and Expected Reciprocal Rank (ERR) to evaluate the quality of ranked search results against manually rated document sets.
<dependency>
<groupId>org.elasticsearch.plugin</groupId>
<artifactId>rank-eval-client</artifactId>
<version>7.17.29</version>
</dependency>// Main request/response classes
import org.elasticsearch.index.rankeval.RankEvalRequest;
import org.elasticsearch.index.rankeval.RankEvalResponse;
import org.elasticsearch.index.rankeval.RankEvalSpec;
import org.elasticsearch.index.rankeval.RankEvalAction;
// Evaluation metrics
import org.elasticsearch.index.rankeval.PrecisionAtK;
import org.elasticsearch.index.rankeval.RecallAtK;
import org.elasticsearch.index.rankeval.MeanReciprocalRank;
import org.elasticsearch.index.rankeval.DiscountedCumulativeGain;
import org.elasticsearch.index.rankeval.ExpectedReciprocalRank;
// Supporting classes
import org.elasticsearch.index.rankeval.RatedRequest;
import org.elasticsearch.index.rankeval.RatedDocument;
import org.elasticsearch.index.rankeval.EvalQueryQuality;// Create evaluation metric
PrecisionAtK metric = new PrecisionAtK(1, false, 10);
// Create rated documents for a query
List<RatedDocument> ratedDocs = Arrays.asList(
new RatedDocument("test_index", "doc1", 2),
new RatedDocument("test_index", "doc2", 1),
new RatedDocument("test_index", "doc3", 0)
);
// Create search request
SearchSourceBuilder searchSource = SearchSourceBuilder.searchSource()
.query(QueryBuilders.matchQuery("title", "elasticsearch"));
// Create rated request
RatedRequest ratedRequest = new RatedRequest(
"test_query",
Arrays.asList("test_index"),
searchSource,
ratedDocs
);
// Create evaluation specification
RankEvalSpec spec = new RankEvalSpec(
Arrays.asList(ratedRequest),
metric
);
// Create and execute rank evaluation request
RankEvalRequest request = new RankEvalRequest(spec, new String[]{"test_index"});
RankEvalResponse response = client.execute(RankEvalAction.INSTANCE, request).get();
// Access results
double overallScore = response.getMetricScore();
Map<String, EvalQueryQuality> queryResults = response.getPartialResults();The core API for creating and executing ranking evaluation requests, including request builders, response handling, and evaluation specifications.
// Main request class
public class RankEvalRequest extends ActionRequest implements IndicesRequest.Replaceable {
public RankEvalRequest(RankEvalSpec rankingEvaluationSpec, String[] indices);
public RankEvalSpec getRankEvalSpec();
public void setRankEvalSpec(RankEvalSpec task);
}
// Main response class
public class RankEvalResponse extends ActionResponse implements ToXContentObject {
public double getMetricScore();
public Map<String, EvalQueryQuality> getPartialResults();
public Map<String, Exception> getFailures();
}
// Evaluation specification
public class RankEvalSpec implements Writeable, ToXContentObject {
public RankEvalSpec(List<RatedRequest> ratedRequests, EvaluationMetric metric);
public EvaluationMetric getMetric();
public List<RatedRequest> getRatedRequests();
}Request and Response API Documentation
Implementation of information retrieval metrics for ranking quality assessment, including Precision@K, Recall@K, MRR, DCG, and ERR with configurable parameters.
// Base interface for all metrics
public interface EvaluationMetric extends ToXContentObject, NamedWriteable {
EvalQueryQuality evaluate(String taskId, SearchHit[] hits, List<RatedDocument> ratedDocs);
default double combine(Collection<EvalQueryQuality> partialResults);
}
// Precision@K implementation
public class PrecisionAtK implements EvaluationMetric {
public static final String NAME = "precision";
public PrecisionAtK(int relevantRatingThreshold, boolean ignoreUnlabeled, int k);
}
// Recall@K implementation
public class RecallAtK implements EvaluationMetric {
public static final String NAME = "recall";
public RecallAtK(int relevantRatingThreshold, int k);
}Evaluation Metrics Documentation
Supporting classes for document rating, search hit handling, query quality evaluation, and configuration management.
// Document with rating
public class RatedDocument implements Writeable, ToXContentObject {
public RatedDocument(String index, String id, int rating);
public DocumentKey getKey();
public int getRating();
}
// Query with rated documents
public class RatedRequest implements Writeable, ToXContentObject {
public RatedRequest(String id, List<String> indices, SearchSourceBuilder request, List<RatedDocument> ratedDocs);
public String getId();
public List<RatedDocument> getRatedDocs();
}
// Query evaluation result
public class EvalQueryQuality implements ToXContentFragment, Writeable {
public String getId();
public double metricScore();
public MetricDetail getMetricDetails();
}Configuration and Utilities Documentation
The Rank Eval plugin follows Elasticsearch's plugin architecture with these key components:
RankEvalPlugin registers actions and REST handlersTransportRankEvalAction handles distributed executionRestRankEvalAction provides HTTP endpoints at /_rank_evalEvaluationMetric interfaceThe plugin supports both individual query evaluation and batch evaluation with template-based queries for systematic ranking quality assessment.