blob: 25ea8509587c326d55c4196f31d8d7b9c4ff7b19 [file] [log] [blame]
/*
* 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. */
@Override
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);
}
}
}