| /* |
| * 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); |
| } |
| } |
| |
| } |