/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.lucene.benchmark.quality; import java.util.Map; /** * A QualityQuery has an ID and some name-value pairs. * <p> * The ID allows to map the quality query with its judgements. * <p> * The name-value pairs are used by a * {@link org.apache.lucene.benchmark.quality.QualityQueryParser} * to create a Lucene {@link org.apache.lucene.search.Query}. * <p> * It is very likely that name-value-pairs would be mapped into fields in a Lucene query, * but it is up to the QualityQueryParser how to map - e.g. all values in a single field, * or each pair as its own field, etc., - and this of course must match the way the * searched index was constructed. */ public class QualityQuery implements Comparable<QualityQuery> { private String queryID; private Map<String,String> nameValPairs; /** * Create a QualityQuery with given ID and name-value pairs. * @param queryID ID of this quality query. * @param nameValPairs the contents of this quality query. */ public QualityQuery(String queryID, Map<String,String> nameValPairs) { this.queryID = queryID; this.nameValPairs = nameValPairs; } /** * Return all the names of name-value-pairs in this QualityQuery. */ public String[] getNames() { return nameValPairs.keySet().toArray(new String[0]); } /** * Return the value of a certain name-value pair. * @param name the name whose value should be returned. */ public String getValue(String name) { return nameValPairs.get(name); } /** * Return the ID of this query. * The ID allows to map the quality query with its judgements. */ public String getQueryID() { return queryID; } /* for a nicer sort of input queries before running them. * Try first as ints, fall back to string if not int. */ public int compareTo(QualityQuery other) { try { // compare as ints when ids ints int n = Integer.parseInt(queryID); int nOther = Integer.parseInt(other.queryID); return n - nOther; } catch (NumberFormatException e) { // fall back to string comparison return queryID.compareTo(other.queryID); } } }